AIM client code for Python?
Jason Scheirer
jason.scheirer at gmail.com
Tue Dec 16 17:56:02 EST 2008
On Dec 16, 9:54 am, Joe Strout <j... at strout.net> wrote:
> I'd like to write an AIM bot in Python. I found and tried
> <http://www.jamwt.com/Py-TOC/>, but it doesn't work for me:
>
> Connecting...
> Traceback (most recent call last):
> File "aimbot-1.py", line 17, in <module>
> bot.go()
> File "/Users/jstrout/Documents/Python-Dev/AIMbot/toc.py", line 62,
> in go
> self.process_loop()
> File "/Users/jstrout/Documents/Python-Dev/AIMbot/toc.py", line 156,
> in process_loop
> event = self.recv_event()
> File "/Users/jstrout/Documents/Python-Dev/AIMbot/toc.py", line 230,
> in recv_event
> dtemp = self._socket.recv(buflen - len(data))
> socket.error: (54, 'Connection reset by peer')
>
> I wrote to the author a week ago, but never got a reply. It could be
> as simple as changing the server addresses in toc.py, currently:
>
> TOC_SERV_AUTH = ("login.oscar.aol.com", 29999 )
> TOC_SERV = ( "toc.oscar.aol.com", 9898 )
>
> ...but I don't understand AIM well enough to know the correct values
> (and was rather hoping that I wouldn't have to).
>
> Does anyone know how to get Py-TOC to work, or have another Python TOC
> implementation to suggest?
>
> Thanks,
> - Joe
What I did once to get a bot working was to use Pidgin, and
communicate with the instance of Pidgin over D-Bus. This has the happy
side effect of making the bot multi-protocol and handling all the
connection drop issues and the like, as well as allowing for you to
intervene in conversations.
class HookForAccount(object):
def __init__(self, usernames=None):
if usernames is not None:
if isinstance(usernames, basestring):
usernames = [usernames]
usernames = set([x.lower() for x in usernames])
bus = dbus.SessionBus()
obj = bus.get_object("im.pidgin.purple.PurpleService",
"/im/pidgin/purple/PurpleObject")
self.purple = dbus.Interface(obj,
"im.pidgin.purple.PurpleInterface")
self.accountids = set()
for account in self.purple.PurpleAccountsGetAllActive():
if usernames is None or
self.purple.PurpleAccountGetUsername(account).lower() in usernames:
print self.purple.PurpleAccountGetUsername(account)
self.accountids.add(account)
bus.add_signal_receiver(self.got_im,
dbus_interface="im.pidgin.purple.PurpleInterface",
signal_name="ReceivedImMsg")
def got_im(self, code, screenname, message, conversation_id,
flags):
time.sleep(1.75)
self.purple.PurpleConvImSend(self.purple.PurpleConvIm
(conversation_id),
"HELLO!")
if __name__ == "__main__":
logging.getLogger().setLevel(0)
dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
HookForAccount(sys.argv[1:] or None)
loop = gobject.MainLoop()
loop.run()
More information about the Python-list
mailing list