On Dec 16, 9:54 am, Joe Strout <j...@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() -- http://mail.python.org/mailman/listinfo/python-list