Esse é o primeiro artigo de uma série que irei escrever sobre o modo texto. A série tem como objetivo principal explorar a possibilidade de usar um computador com Linux sem o uso de um servidor X. Neste artigo será tratado um excelente cliente MSN em modo texto - o Pebrot.
OBS: Não irei entrar em detalhes menores sobre shell script, considero que quem está lendo essa parte do artigo já possua conhecimento básico sobre o assunto. Todavia, deixo o seguinte link para quem deseje estudar sobre o assunto:
Essa é uma funcionalidade simples, mas extraordinária do Pebrot, ele pode executar comandos!!! Sim o Pebrot, orientado a eventos, pode executar comandos. A idéia é simples: há uma série de eventos possíveis (quando alguém conecta, quando alguém manda uma mensagem, quando alguém desconecta, etc), que, quando acontecem, acionam comandos previamente configurados!
Ainda não entendeu? Observe esse exemplo simples:
Quero saber se minha namorada tem conectado no MSN e quanto tempo ela fica conectada. Como fazer isso? Normalmente a única opção é pedir a um amigo que fique vigiando o MSN. Mas basta que ele se distraia um minuto, ou saia por algum motivo, que a vigília fica comprometida. Mas e se eu puder deixar meu cliente MSN de vigia no lugar de meu amigo?
Para implementar isso é necessário saber algumas coisas antes:
Os eventos devem ser estabelecidos no arquivo de configuração do Pebrot (~/.pebrot/pebrotrc);
Os eventos possíveis são:
exec_on_msg: quando uma nova mensagem for recebida
exec_on_new_chat: quando uma nova janela de chat for criada
exec_on_file_recv_begin: quando uma transferência de arquivo for iniciada
exec_on_file_recv_end: quando uma transferência de arquivo for terminada
exec_on_pal_state_nln: quando um contato mudar de estado para 'online'
exec_on_pal_state_change: Contato mudar de estado (para qualquer um, mas conectado)
exec_on_pal_connected: quando um contato conectar
exec_on_pal_disconnected: quando um contato desconectar
É possível usar variáveis diferentes em cada evento. São elas:
exec_on_msg: $passport, $user, $msg
exec_on_new_chat: $passport, $user, $msg
exec_on_file_recv_begin: $passport, $user, $file, $size
exec_on_file_recv_end: $passport, $user, $file, $size
exec_on_pal_state_nln: $passport, $user
exec_on_pal_state_change: $passport, $user, $state
exec_on_pal_connected: $passport, $user, $state
exec_on_pal_disconnected: $passport, $user
Certo, agora de posse dessas informações podemos aplicar para nosso objetivo:
A sintaxe da definição dos eventos é muitos simples: <evento>= <comando>. Assim, se eu quiser criar um arquivo de log chamado 'conectaram' para registrar quem conectou no MSN posso, por exemplo, criar a seguinte linha no arquivo de configuração do Pebrot:
Mas claro, que para deixar os resultados mais refinados - afinal eu só quero saber das movimentações da minha namorada - eu posso criar um shell script que faça o registro para mim. Então, posso criar um script assim:
#!/bin/bash
if [ $1 = "minha_namorada@hotmail.com" ]; then
if [ $2 = "conectou" ]; then
echo "ela CONECTOU em `date`" >> /home/<minhapasta>/namorada
else
echo "ela DESCONECTOU em `date`" >> /home/<minhapasta>/namorada
fi
fi
Salvo o arquivo como "controledenamorada", dou permissão de execução e salvo em /usr/bin. Então registro os seguintes eventos no arquivo de configuração do Pebrot:
Pronto, agora no arquivo /home/<minhapasta>/namorada, só serão registradas as ações daquele passport específico.
Talvez seja interessante também que eu entre sempre como 'Aparecer Offline', afinal, não quero que ela saiba que eu estou fazendo isso. Para isso no arquivo de configuração do Pebrot deixe a seguinte opção assim:
state= HDN
Esse foi um exemplo simples do que se pode fazer usando os eventos do Pebrot, imagine-se agendando tarefas no seu computador através do MSN, mandando e-mails, ou qualquer outra tarefa, simples ou complexa. Todavia, essa função deve ser usada com muita cautela, pois pode ser muito perigosa se mal configurada.
Infelizmente o Pebrot, pelo menos na versão citada (0.8.8), ainda não tem a possibilidade de executar tarefas comandos, como por exemplo, mandar uma mensagem para um contato, ou mesmo um arquivo, através de linha de comando.
[2] Comentário enviado por removido em 03/01/2007 - 10:00h
recomendo que deem uma olhada no msnp http://msnp.sourceforge.net/ ele é escrito em python e usa curses, é muito bonito e bem feito, levicimo e um forte concorrente.
[4] Comentário enviado por fsamoreira em 03/01/2007 - 12:02h
o problema que eu encontrei no msnp é principalmente o fato de que a última atualização dele é de janeiro de 2004. ou seja, a 3 anos que não mechem nele
[11] Comentário enviado por EdDeAlmeida em 04/01/2007 - 20:21h
Muito bom o pebrot! Gosto de programar no console, mas como tenho de dar assistência a alguns clientes via MSN, acabava ficando preso ao X. Agora posso preogramar em paz, com o pebrot noutro terminal. Vou hackear o código para ver se implemento algumas coisas, como avisos quando chegam mensagens e coisas assim.
Obrigado.
[12] Comentário enviado por tenchi em 07/01/2007 - 18:36h
Ah, você disse que vai escrever sobre o screen. Não sei se você já viu, mas no site do Aurélio tem bastande coisa sobre este programa. Na verdade foi lá que eu aprendi sobre o screen.
[15] Comentário enviado por rafa-ctba em 03/06/2007 - 23:33h
Estou com o seguinte problema ao tentar entrar pelo pebrot:
Traceback (most recent call last):
File "/home/daniel/.pebrot/pebrot", line 16, in <module>
pypebrot.pebrot.main()
File "/home/daniel/Desktop/pebrot-0.8.7/pypebrot/pebrot.py", line 1886, in main
curses.wrapper( gogogo )
File "curses/wrapper.py", line 44, in wrapper
File "/home/daniel/Desktop/pebrot-0.8.7/pypebrot/pebrot.py", line 1848, in gogogo
con.loopInput()
File "/home/daniel/Desktop/pebrot-0.8.7/pypebrot/pebrot.py", line 1524, in loopInput
self.oneStep()
File "/home/daniel/Desktop/pebrot-0.8.7/pypebrot/pebrot.py", line 1454, in oneStep
st= self.Text.getLine( self.handleInput, self.step )
File "/home/daniel/Desktop/pebrot-0.8.7/pypebrot/ui.py", line 250, in getLine
idleFunc()
File "/home/daniel/Desktop/pebrot-0.8.7/pypebrot/MSN.py", line 920, in step
self.processMsgs()
File "/home/daniel/Desktop/pebrot-0.8.7/pypebrot/MSN.py", line 1004, in processMsgs
msg= Msg( res[1] )
File "/home/daniel/Desktop/pebrot-0.8.7/pypebrot/MSN.py", line 512, in __init__
expLen= len( MSGS[self.type] )+1
KeyError: 'NOT'
[17] Comentário enviado por lucaspolo em 21/12/2008 - 21:53h
Realmente é muito interessante esse Pebrot!
Eu ainda li um outro artigo seu sobre páginas antigas e vi sobre máquinas antigas e dicas de como monta-las, dai comecei a juntar as idéias do tico e do teco e agora to pensando em montar uma máquininha só por brincadeira...
[18] Comentário enviado por david fonseca em 13/08/2009 - 22:34h
Amigos aki ta assim quando eu chamo o $ pebrot
david@david-ubuntu:~$ pebrot
/usr/local/lib/python2.6/dist-packages/pypebrot/MSN.py:7: DeprecationWarning: the md5 module is deprecated; use hashlib instead
import md5
Traceback (most recent call last):
File "/usr/local/bin/pebrot", line 16, in <module>
pypebrot.pebrot.main()
File "/usr/local/lib/python2.6/dist-packages/pypebrot/pebrot.py", line 1980, in main
os.mkdir( MAIN_LOG_DIR )
OSError: [Errno 13] Permission denied: '/home/david/.pebrot/logs/'
[19] Comentário enviado por El Camaleon em 08/04/2011 - 00:29h
Sem querer reviver esse tópico .. mas eu queria uma solução para o problema acima afinal ele esta sendo o meu nos dias de hoje. Após seguir todos os passos listados acima sobre instalação depois ter ir e colocar o arquivo pebrotrc na pasta ./pebrot e enfim perceber que o pebrot vai funcionar e ficar a um passo de usá-lo acontece esse erro que o David citou.
Eu consigo entrar com meu usuário ele chega a pedir senha e entra na tela e começa a carregar quando ele esta carregando a tela simplesmente fecha e o que resta é a mensagem:
/usr/local/lib/python2.6/dist-packages/pypebrot/MSN.py:7: DeprecationWarning: the md5 module is deprecated; use hashlib instead
import md5
Traceback (most recent call last):
File "/usr/local/bin/pebrot", line 16, in <module>
pypebrot.pebrot.main()
File "/usr/local/lib/python2.6/dist-packages/pypebrot/pebrot.py", line 1886, in main
curses.wrapper( gogogo )
File "/usr/lib/python2.6/curses/wrapper.py", line 43, in wrapper
return func(stdscr, *args, **kwds)
File "/usr/local/lib/python2.6/dist-packages/pypebrot/pebrot.py", line 1848, in gogogo
con.loopInput()
File "/usr/local/lib/python2.6/dist-packages/pypebrot/pebrot.py", line 1524, in loopInput
self.oneStep()
File "/usr/local/lib/python2.6/dist-packages/pypebrot/pebrot.py", line 1454, in oneStep
st= self.Text.getLine( self.handleInput, self.step )
File "/usr/local/lib/python2.6/dist-packages/pypebrot/ui.py", line 250, in getLine
idleFunc()
File "/usr/local/lib/python2.6/dist-packages/pypebrot/MSN.py", line 920, in step
self.processMsgs()
File "/usr/local/lib/python2.6/dist-packages/pypebrot/MSN.py", line 1004, in processMsgs
msg= Msg( res[1] )
File "/usr/local/lib/python2.6/dist-packages/pypebrot/MSN.py", line 512, in __init__
expLen= len( MSGS[self.type] )+1
KeyError: 'NOT'
Agradeço a ajuda de todos, peço desculpas por estar revivendo esse tópico mas gostaria de ajuda. Mais uma vez obrigado.
[21] Comentário enviado por khyron em 11/05/2012 - 11:37h
bom dia!...
tb estou com esse problema...alguem poderia ajudar ???
$pebrot
/usr/local/lib/python2.6/dist-packages/pypebrot/MSN.py:7: DeprecationWarning: the md5 module is deprecated; use hashlib instead
Traceback (most recent call last):
File "/usr/local/bin/pebrot", line 16, in <module>
pypebrot.pebrot.main()
File "/usr/local/lib/python2.6/dist-packages/pypebrot/pebrot.py", line 1886, in main
File "/usr/lib/python2.6/curses/wrapper.py", line 43, in wrapper
return func(stdscr, *args, **kwds)
File "/usr/local/lib/python2.6/dist-packages/pypebrot/pebrot.py", line 1822, in gogogo
File "/usr/local/lib/python2.6/dist-packages/pypebrot/pebrot.py", line 756, in getPassword
File "/usr/local/lib/python2.6/dist-packages/pypebrot/pebrot.py", line 483, in fatalError