How-to: Criar um bot MSN/Jabber Isto não é de todo um how-to, nem entra nos detalhes de como lidar com autorizações, remoções mensagens, roster, etc e tal. É apenas um mini relato (como prometido e para guardar links) de como implementar um bot para MSN (baseada na experiência do serviço de alertas IM do Destakes).
Para Jabber não tem muito que saber, é um protocolo aberto e o que não faltam são libs para o fazer. MSN é outro filme... aqui fica a experiência por ordem de tentativas.
POE::Component::Client::MSN
Nesta caso valeu a pena para rever o POE. A última vez que lhe tinha tocado foi quando o Pedro Melo me "obrigou" a usar-lo para uma coisa no Mail.pt (já nem sei para que foi). Desta maneira ligamo-nos directamente aos servidores do MSN, funcionou tudo muito bem, mas morreu na praia. Se bem me lembro, não conseguia ver quem no roster (lista contactos) estava online, o que deita todo o resto por terra. A certa altura, se bem me lembro, já andava a ler páginas com a descrição do protocolo MSN. E depois, quem pegar neste módulo tem sempre de ultrapassar a learning curve do POE. :-/
Openfre IM Gateway
Esta deveria ter sido a primeira escolha. Era óbvia, mas passou-me ao lado. Ao fim ao cabo, o servidor de Jabber do Destakes corre em cima de Openfire. Era instalar o plug-in, ligar lá o bot Jabber e ele passava a falar no MSN. Mesmo código, mesmas features. E foi, point and click... mas morreu na praia também. As autorizações de adição de contacto não chegavam ao outro lado e como é típico nestas "cenas open-source", o developer não tinha tempo para o remendar.
PyMSNt
Terceira tentativa, sugestão do Pedro Melo.
Este gateway encaixa no Openfire, mas tem algumas dependências e foi aí que falhou. Mesmo fazendo upgrade para as últimas versões, inclusive ao Python, o gajo rebentava com uma excepção no Twisted quando tentava ligar-se aos servidores MSN. Foi azar (ou falta de jeito) porque o SAPO usa isto e não parece ter problemas de maior. Como a coisa é Python e nem com as últimas releases ia ao sítio, não lhe dei muito tempo, inclusive porque em conversa com o Delfim, ele saiu-se com uma solução menos trabalhosa (mal sabia eu).
Outsourcing (e re-escrever o bot com o Net::XMPP2)
A ideia passava por usar o servidor Jabber do SAPO (mais concretamente o transporte) para me ligar ao MSN. Na prática o que faria na solução anterior, mas usando um "servidor alheio" (acho que não se importam). :->
O problema foi quando me tentei ligar lá. O bot funcionava com o Openfire mas não com o servidor do SAPO. Resumia-se a parâmetros na ligação... mas que não tinham solução porque a lib que usei (a primeira que aparece quando se procura por XMPP no CPAN) é outdated e não acompanhou o protocolo, coisa que só descobri depois de lançar o serviço. Como funcionava, nunca liguei.
Long story short, toca a re-escrever o bot com a Net::XMPP2. A maioria do código aproveitou-se, grande parte desapareceu (o script foi para metade das linhas) e... ligou-se.
Na prática, é uma só instância que se liga aos dois servidores, e apesar do MSN o bot só fala XMPP(jabber), o gateway faz o resto.
Para já tem corrido bem. Alguns soluços no início, mas agora parece estabilizado. Esta semana deverá chegar aos 200 contactos (tem 197 contactos com 352 alertas configurados).
Hoje, se voltasse a fazer o mesmo, talvez tivesse experimentado a libpurple (descobri-a hoje).
What is libpurple?
libpurple is intended to be the core of an IM program. When using libpurple, you'll basically be writing a UI for this core chunk of code. Pidgin is a GTK+ frontend to libpurple, Finch is an ncurses frontend, and Adium is a Cocoa frontend.
Para quem conhece, é a base do Adium, do Pidgin e do Meebo por exemplo.
É escrita em C mas existem bindings para PHP e Perl por exemplo.
Have fun.
ps: btw, se vão criar um serviço de IM façam-no em Jabber, mas criem um MSN também. Jabber é aberto e tal, mas really... "ninguém o usa" e a diferença no volume de clientela nota-se.
Eu já fiz bots para MSN, mas usando uma library em Python que ligava directamente ao MSN. Acabei por corrigir uma coisa ou outra para funcionar, mas era bem simples :) por Alcides a 25 Março 2008 - 20:02
bot
eu sou um desses 197, até agora estou a gostar muito desse serviço, parabens! por Bruno a 25 Março 2008 - 20:11
Jabber.. eu uso :)
Sim é certo que pouca a gente o usa, mas é porque desconhecem. Se calhar até uma questão de "moda". Quem é que não teve uma conta no ICQ muito antes do MSN?? por José Gaspar a 25 Março 2008 - 21:19
Blogmaster
Tem 36 anos, é natural de Vila Nova de Famalicão mas mora no Porto desde que veio para a universidade... bem, morou. Agora já casado, está pela Maia. Anda pela internet há já uns 16 anos tendo trabalhado em vários projectos como foram o caso do Mail.pt ou no Sapo. Também conhecido como o responsável pelo ITJobs, o Destakes e o Usauto entre outras brincadeiras.
De resto já bloga há uns 11 anos apesar de ter perdido parte da "vida" numa mudança de hosting provider. Algumas restias ainda por aí andam... ah, e o email de contacto está no footer.
não chateiem com os erros de Português... "the bad spelling is part of the charm". ;-)
escusado será dizer que as opiniões aqui expressas são minhas e só minhas, e não de outros ou da empresa onde trabalho
qualquer outro bitaite... ramblings at karlus.net
não, não é powered by MovableType
ou Wordpress, é powered by código meu em PHP
O conteúdo deste site não poderá ser utilizado sem a sua autorização expressa.
As imagens nele contidas são propriedade dos respectivos autores.