Estou pesquisando sobre bots e precisei implementar um em java. Este programa conecta-se em um servidor do google talk e fica on-line eternamente, aguardando mensagens dos usuários. Para fins didáticos, ele apenas retorna o número informado, multiplicado por 2.
O programa extra que vc precisa baixar pra tudo isso funcionar, é a API Smack (v. 3.0.4), que encontra-se aqui. (após descompactar, vamos precisar apenas do smack.jar e smackx.jar)
Ponha o código-fonte abaixo num arquivo chamado Botsd.java. Coloque os dois .jar e o .java na mesma pasta e compile e execute:
$ javac -cp '.:smack.jar:smackx.jar' *.java
$ java -cp '.:smack.jar:smackx.jar' Botsd
Pronto! Vc já tem seu bot! Ah, obviamente mude o email e a senha que estão dentro do arquivo.
Obs: se quer mais informações sobre como utilizar uma API que vem num .jar leia isso.
Código-fonte:
/*
* Mantém um bot para gtalk
*/
import org.jivesoftware.smack.*;
import org.jivesoftware.smack.packet.Presence;
import org.jivesoftware.smack.packet.Packet;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.PacketListener;
import org.jivesoftware.smack.filter.PacketFilter;
import org.jivesoftware.smack.filter.PacketTypeFilter;
import org.jivesoftware.smack.Chat;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.ConnectionConfiguration;
import org.jivesoftware.smack.XMPPConnection;
public class Botsd {
static XMPPConnection conexao;
public Botsd() {}
public static void main(String args[]) {
// strings
String servidor = "talk.google.com";
Integer porta = 5222;
String servico = "gmail.com";
String usuario = "meu_usuario_do_gmail_sem_arroba";
String senha = "minha_senha";
// configs do gtalk
ConnectionConfiguration config = new ConnectionConfiguration(servidor, porta, servico);
config.setSASLAuthenticationEnabled(true);
config.setReconnectionAllowed(true);
conexao = new XMPPConnection(config);
// tentando conectar
System.out.println("[ .... ] Tentando conectar... ");
try {
conexao.connect();
System.out.println("[ OK ] Conectado.");
// tentando logar
System.out.println("[ .... ] Tentando logar...");
try {
conexao.login(usuario, senha);
System.out.println("[ OK ] Logado.");
// envia presenca
System.out.println("[ .... ] Atualizando presenca e status...");
Presence presenca = new Presence(Presence.Type.available);
presenca.setStatus("Oi gente!");
conexao.sendPacket(presenca);
System.out.println("[ OK ] Atualizado.");
PacketFilter meuFiltro = new PacketTypeFilter(Message.class);
conexao.addPacketListener(criaListener(), meuFiltro);
try {
// loop infinito, aguardando mensagens...
System.out.println("[ .... ] Ouvindo...");
while(true) {
Thread.sleep(1000);
}
} catch (Exception e) {};
} catch (XMPPException e) {
System.out.println("[ ERRO ] Nao consegui logar!");
}
} catch (XMPPException e) {
System.out.println("[ ERRO ] Nao consegui conectar no servidor!");
}
}
/*
* Aqui esta definido o metodo que ira manipular as mensagens recebidas...
*/
public static PacketListener criaListener() {
PacketListener meuListener = new PacketListener() {
public void processPacket(Packet pacote) {
// pega dados relevantes
String mensagem = ((Message)pacote).getBody();
String origem = pacote.getFrom();
Integer resultado = Integer.parseInt(mensagem) * 2;
String retorno = mensagem+" * 2 = "+resultado;
enviaMensagem(origem, retorno);
}};
return meuListener;
}
/*
* Envia mensagem para o destino especificado...
*/
public static void enviaMensagem(String destino, String mensagem) {
MessageListener meuMessageListener;
meuMessageListener = new MessageListener() {public void processMessage(Chat chat, Message message) {}};
Chat chat = conexao.getChatManager().createChat(destino, meuMessageListener);
try {
chat.sendMessage(mensagem);
} catch (XMPPException e) {
System.out.println("[ ERRO ] Nao consegui enviar mensagem para "+destino);
}
}
}
Obs: se lhe foi útil, deixe um comentário, por favor...
Obs2: tentei identar o código, mas o blogger tirou tudo...
Valeu cara!
ResponderExcluirFico feliz q o post no meu blog tenha te ajudado.
Abraço!
show! Funcionou!!!
ResponderExcluir