2005年09月03日 星期六 21:19
原文: http://evaxp.com/ksblog/post/798.html 最新版本为: 1.2 作者主页: http://coders.meta.net.nz/~perry/jabber/confbot.php -- I like python! My Donews Blog: http://www.donews.net/limodou
2005年09月03日 星期六 21:43
在 05-9-3,limodou<limodou at gmail.com> 写道: > 原文: http://evaxp.com/ksblog/post/798.html > 最新版本为: 1.2 > > 作者主页: http://coders.meta.net.nz/~perry/jabber/confbot.php > 我已经创建了一个 china.python at gmail.com 使用时首先我需要运行confbot.py程序,然后大家就可以把china.python at gmail.com加为好友了。再聊天就可以了。 具体命令见上面的作者主页。有时间汉化一下。 大家也可以自行创建。 -- I like python! My Donews Blog: http://www.donews.net/limodou
2005年09月03日 星期六 22:08
我也跟一个http://www.customizetalk.com/pages/index.php?page=news 定制你的GTalk:) 在 05-9-3,limodou<limodou at gmail.com> 写道: > 在 05-9-3,limodou<limodou at gmail.com> 写道: > > 原文: http://evaxp.com/ksblog/post/798.html > > 最新版本为: 1.2 > > > > 作者主页: http://coders.meta.net.nz/~perry/jabber/confbot.php > > > > 我已经创建了一个 china.python at gmail.com > 使用时首先我需要运行confbot.py程序,然后大家就可以把china.python at gmail.com加为好友了。再聊天就可以了。 > > 具体命令见上面的作者主页。有时间汉化一下。 > > 大家也可以自行创建。 > > -- > I like python! > My Donews Blog: http://www.donews.net/limodou > > _______________________________________________ > python-chinese list > python-chinese at lists.python.cn > http://python.cn/mailman/listinfo/python-chinese > > > -- Blog:http://www.donews.net/changzheng
2005年09月04日 星期日 01:05
我也报名。在上海。 - ahbei > 在 05-8-27,Zoom Quiet<zoom.quiet at gmail.com> 写道: > >> 在 05-8-27,Hoxide Ma<hoxide_dirac at yahoo.com.cn> 写道: >> >>> 继 Zoomq 等一大批在北京的Pythoner行动起来后, >>> 长三角地区的Pythoner也要有点活动啊~~~~ >>> > > 这个好啊,凡是江浙沪的pythoner都出来报个名,冒 > 个泡。 > 建议到 http://wiki.woodpecker.org.cn/moin/SPUG 冒泡。 > 然后可以根据人员的分布密度来确定地点。 > 虽然苏州杭州上海离的都不远,可以一个来回也要 > 一天的呢。
2005年09月05日 星期一 07:10
我也创建了一个 python3 at gmail.com 不过好像网络不太好, 看到limodou加入了,后来bot自己死了又启动,就看不到limodou了。。。 有人已经改进了代码, 可以只有在某个list的人才可以加入, 他还准备移植到c sharp平台 蒙他慷慨, 我把他的代码放上来有兴趣的可以看一下,可能缩进有些问题. -------------- next part -------------- #!/usr/bin/env python # confbot -- a conference bot for google talk. # Copyright (C) 2005 Perry Lorier (aka Isomer) # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # You will want to change these: account="conferencebot" # put the name of your bots gtalk account here server="gmail" password="gnarff" # Put the password of your bots gtalk account here topic="A Chat Room (v1.2.5_unofficial)" admins=[ 'whoeveryouwant at gmail.com', # Put your gmail account here ] # Added by: Lukas (sinisterguy at gmail.com) # I don't know why i need this but it's here users=[ 'whoeveryouwant at gmail.com', # I haven't tried taking this code out, but the bot works as-is. ] # Just put the admin address here (asuming the admin is going # to be the main user) resource="conference" # Make's the room private by default make_private_default="yes" # Change to "no" if you want your chat bot to be public by default # You shouldn't have to change anything below this line -------------------- import socket import jabber import xmlstream import sys import time import random import traceback import urllib version='1.2.5_unofficial' commandchrs = '/)' logf = open(time.strftime("%Y%m%d%H%M%S.log"),"w") xmllogf = open("xmllog","w") last_activity=time.time() #xmllogf = sys.stderr try: adminfile = open("adminlist.txt","r") admins=[i.strip() for i in adminfile.readlines()] adminfile.close() except: print "Could not open admin file, creating a new one" # Added by: Lukas (sinisterguy at gmail.com) # Opens user list try: usersfile = open("userlist.txt","r") users=[i.strip() for i in usersfile.readlines()] usersfile.close() except: print "Could not open user list" traceback.print_exc() con=None def getdisplayname(x): "Changes a user at domain/resource to a displayable nick (user)" x=unicode(x) if '/' in x: x=x[:x.find("/")] if '@' in x and x[x.find('@'):]=="@gmail.com": x=x[:x.find("@")] return x def getjid(x): "returns a full jid from a display name" if '@' not in x: x=x+"@gmail.com" return x def saveadminlist(): "Saves the admin list to disk" a=open("adminlist.txt","w") for i in admins: print >>a,i a.close() # Added by: Lukas # Save's the user list def saveuserlist(): "Saves the user list to disk" a=open("userlist.txt","w") for i in users: print >>a,i a.close() def sendtoone(who,msg): m = jabber.Message(who,msg) m.setType('chat') con.send(m) def sendtoall(msg,butnot=[],including=[]): r = con.getRoster() print >>logf,time.strftime("%Y-%m-%d %H:%M:%S"),msg.encode("utf-8") logf.flush() print time.strftime("%Y-%m-%d %H:%M:%S"),msg.encode("utf-8") for i in r.getJIDs(): if getdisplayname(i) in butnot: continue state=r.getShow(unicode(i)) if state in ['available','chat',None] or getdisplayname(i) in including: sendtoone(i,msg) time.sleep(.1) statuses={} suppressing=1 def sendstatus(who,txt,msg): who = getdisplayname(who) if statuses.has_key(who) and statuses[who]==txt: return statuses[who]=txt if not statuses.has_key(who): # Suppress initial status return if suppressing: return if msg: sendtoall('*** %s is %s (%s)' % (who,txt,msg),including=[who]) else: sendtoall('*** %s is %s' % (who,txt),including=[who]) def boot(jid): "Remove a user from the chatroom" con.send(jabber.Presence(to=jid, type='unsubscribe')) con.send(jabber.Presence(to=jid, type='unsubscribed')) if statuses.has_key(getdisplayname(jid)): del statuses[getdisplayname(jid)] def cmd(who,msg): if " " in msg: cmd,msg=msg.split(" ",1) else: cmd,msg=msg.strip(),"" if cmd[:1] in commandchrs: cmd=cmd[1:] if cmd in ["me"]: if msg.strip()=="": action=random.choice(['jumps','cries','hops','sighs','farts','keels over and dies']) sendtoone(who,'*** Usage: /me\nSays an emote as you. eg "/me %(action)s" shows as "* %(nick)s %(action)s" to everyone else' % { "nick" : getdisplayname(who), "action" : action, }) else: sendtoall('* %s %s' % (getdisplayname(who),msg),butnot=[getdisplayname(who)]) elif cmd in ["help"]: sendtoone(who,"*** Commands: \")help\" \"/me\" \")names\" \")quit\" \")msg\"") if who.getStripped() in admins: sendtoone(who,'*** Admin commands: ")die" ")addadmin" ")deladmin" ")kick"') # Added help section by: Lukas (sinisterguy at gmail.com) sendtoone(who,'*** Privacy commands: "/makeprivate" "/makepublic" "/adduser" "/deluser"') sendtoone(who,'*** See http://coders.meta.net.nz/~perry/jabber/confbot.php for more details') elif cmd in ["names"]: r = con.getRoster() names=[] for i in r.getJIDs(): state=r.getShow(unicode(i)) name=getdisplayname(i) if i.getStripped() in admins: name="@%s" % name if state in ['available','chat',None]: names.insert(0,name) else: names.append('(%s)' % name) sendtoone(who,'*** Names: %s' % " ".join(names)) elif cmd in ["quit","leave","exit"]: sendtoall('*** Quit: %s (%s)' % (getdisplayname(who),msg)) boot(who.getStripped()) elif cmd in ['msg']: if not ' ' in msg: sendtoone(who,'*** Usage: )msg ') else: target,msg = msg.split(' ',1) sendtoone(getjid(target),'*%s* %s' % (getdisplayname(who),msg)) sendtoone(who,'>%s> %s' % (getdisplayname(target),msg)) elif cmd in ['kick','boot'] and who.getStripped() in admins: boot(getjid(msg)) sendtoall('*** Booted: %s' % msg.strip()) elif cmd in ['addadmin'] and who.getStripped() in admins: admins.append(getjid(msg.strip())) sendtoone(who,'*** Added %s' % getjid(msg.strip())) sendtoone(getjid(msg.strip()),'*** %s added you as an admin' % getdisplayname(who)) saveadminlist() elif cmd in ['deladmin'] and who.getStripped() in admins: if getjid(msg.strip()) in admins: admins.remove(getjid(msg.strip())) sendtoone(who,'*** Removed %s' % getjid(msg.strip())) sendtoone(getjid(msg.strip()),'*** %s removed you as an admin' % getdisplayname(who)) saveadminlist() else: sendtoone(who,'*** %s is not an admin' % getjid(msg.strip())) elif cmd in ['die'] and who.getStripped() in admins: sendtoall('*** Admin shutdown by %s' % who.getStripped()) sys.exit(1) # Added by: Lukas (sinisterguy at gmail.com) elif cmd in ['makeprivate'] and who.getStripped() in admins: # Makes the chat private con.setPresenceHandler(presenceCB_private) # TODO: add privacy checking to notify user if chat is sendtoone(who,"*** Chat made private") # already private elif cmd in ['makepublic'] and who.getStripped() in admins: # Makes the chat public con.setPresenceHandler(presenceCB) # TODO: add privacy checking to notify user if chat is sendtoone(who,"*** Chat made public") # already public elif cmd in ['adduser'] and who.getStripped() in admins: # Adds authorized users users.append(getjid(msg.strip())) sendtoone(who,'*** Added %s' % getjid(msg.strip())) saveuserlist() elif cmd in ['deluser'] and who.getStripped() in admins: # Deletes authorized users if getjid(msg.strip()) in users: users.remove(getjid(msg.strip())) sendtoone(who,'*** Removed %s' % getjid(msg.strip())) saveuserlist() else: sendtoone(who,'*** %s is not a user' % getjid(msg.strip())) else: sendtoone(who,'Unknown command %s' % cmd) def messageCB(con,msg): if msg.getError()!=None: if statuses.has_key(getdisplayname(msg.getFrom())): sendstatus(unicode(msg.getFrom()),"away","Blocked") boot(msg.getFrom().getStripped()) elif msg.getBody(): if len(msg.getBody())>1024: sendtoall("*** %s is being a moron trying to flood the channel" % (getdisplayname(msg.getFrom()))) elif msg.getBody()[:1] in commandchrs: cmd(msg.getFrom(),msg.getBody()) else: global suppressing,last_activity suppressing=0 last_activity=time.time() sendtoall('<%s> %s' % (getdisplayname(msg.getFrom()),msg.getBody()), butnot=[getdisplayname(msg.getFrom())], ) print 'status:',con.getRoster().getShow(msg.getFrom().getStripped()),msg.getFrom().getStripped() if con.getRoster().getShow(msg.getFrom()) not in ['available','chat',None]: sendtoone(msg.getFrom(),'*** Warning: You are marked as "busy" in your client,\nyou will not see other people talk,\nset yourself "available" in your client to see their replies.') xmllogf.flush() # just so flushes happen regularly def presenceCB(con,prs): who = unicode(prs.getFrom()) type = prs.getType() # TODO: Try only acking their subscription when they ack ours. if type == 'subscribe': con.send(jabber.Presence(to=who, type='subscribed')) con.send(jabber.Presence(to=who, type='subscribe')) print "Subscribe from",who elif type == 'unsubscribe': boot(prs.getFrom().getStripped()) print "Unsubscribe from",who elif type == 'subscribed': sendtoone(who,"""Welcome to ConferenceBot %(version)s By Perry Lorier (Isomer) This conference bot is set up to allow groups of people to chat. ")help" to list commands, ")quit" to quit """ % { "version" : version, # Change the default greeting if you wish }) sendstatus(who,'here','joining') #5982 679c 4f60 8bf4 4e2d 6587 ff0c 8bf7 7528 cnbetabot at gmail.com elif type == 'unsubscribed': sendtoall('%s has left' % getdisplayname(who)) elif type == 'available' or type == None: show = prs.getShow() if show in [None,'chat','available']: sendstatus(who,'here',prs.getStatus()) elif show in ['xa']: sendstatus(who,'away',prs.getStatus()) elif show in ['away']: sendstatus(who,'away',prs.getStatus()) elif show in ['dnd']: sendstatus(who,'away',prs.getStatus()) else: sendstatus(who,'away',show+" [[%s]]" % prs.getStatus()) elif type == 'unavailable': status = prs.getShow() sendstatus(who,'away',status) else: print "Unknown presence:",who,type def presenceCB_private(con,prs): # Presence handler for private chat who = unicode(prs.getFrom()) type = prs.getType() # TODO: Try only acking their subscription when they ack ours. if type == 'subscribe': con.send(jabber.Presence(to=who, type='subscribed')) con.send(jabber.Presence(to=who, type='subscribe')) print "Subscribe from",who elif type == 'unsubscribe': boot(prs.getFrom().getStripped()) print "Unsubscribe from",who elif type == 'subscribed': # Changes by: Lukas (sinisterguy at gmail.com) # Checks the user list (userlist.txt) for the # requesting party. Boots the user if unauthorized # (name not found in list). if prs.getFrom().getStripped() in users: sendtoone(who,"""Welcome to ConferenceBot %(version)s By Perry Lorier (Isomer) This conference bot is set up to allow groups of people to chat. ")help" to list commands, ")quit" to quit""" % { "version" : version, # Change the default greeting if you wish }) sendstatus(who,'here','joining') else: sendtoone(who,"""\n*** You do not have permission to use this chat bot. To request authorization, please IM or email me at sinisterguy at gmail.com""") boot(who) elif type == 'unsubscribed': sendtoall('%s has left' % getdisplayname(who)) elif type == 'available' or type == None: show = prs.getShow() if show in [None,'chat','available']: sendstatus(who,'here',prs.getStatus()) elif show in ['xa']: sendstatus(who,'away',prs.getStatus()) elif show in ['away']: sendstatus(who,'away',prs.getStatus()) elif show in ['dnd']: sendstatus(who,'away',prs.getStatus()) else: sendstatus(who,'away',show+" [[%s]]" % prs.getStatus()) elif type == 'unavailable': status = prs.getShow() sendstatus(who,'away',status) else: print "Unknown presence:",who,type def iqCB(con,iq): # reply to all IQ's with an error reply=None try: # Google are bad bad people # they don't put their query inside a in reply=jabber.Iq(to=iq.getFrom(),type='error') stuff=iq._node.getChildren() for i in stuff: reply._node.insertNode(i) reply.setError('501','Feature not implemented') con.send(reply) except: traceback.print_exc() def disconnectedCB(con): sys.exit(1) con = jabber.Client(host=server,debug=False ,log=xmllogf, port=5223, connection=xmlstream.TCP_SSL) con.connect() con.setMessageHandler(messageCB) # Added by: Lukas (sinisterguy at gmail.com) if make_private_default == "no": # Checks default privacy setting, adjusts privacy handler appropraitely con.setPresenceHandler(presenceCB) else: con.setPresenceHandler(presenceCB_private) con.setIqHandler(iqCB) con.setDisconnectHandler(disconnectedCB) con.auth(account,password,resource) con.requestRoster() con.sendInitPresence() _roster = con.getRoster() for jid in _roster.getJIDs(): print jid,_roster.getOnline(jid),_roster.getStatus(jid),_roster.getShow(jid) JID="%s@%s/%s" % (account,server,resource) last_update=0 saveadminlist() while 1: # We announce ourselves to a url, this url then keeps track of all # the conference bots that are running, and provides a directory # for people to browse. if time.time()-last_update>4*60*60: # every 4 hours args={ 'action':'register', 'account':"%s@%s" % (account,server), 'users':len(con.getRoster().getJIDs()), 'last_activity':time.time()-last_activity, 'version':version, 'topic':topic, } try: urllib.urlretrieve('http://coders.meta.net.nz/~perry/jabber/confbot.php?'+urllib.urlencode(args)) print "Updated directory site" except: print "Can't reach the directory site" traceback.print_exc() last_update = time.time() con.process(1)
2005年09月05日 星期一 08:23
在 05-9-5,saddle<saddle at gmail.com> 写道: > 我也创建了一个 python3 at gmail.com > 不过好像网络不太好, 看到limodou加入了,后来bot自己死了又启动,就看不到limodou了。。。 > 有人已经改进了代码, 可以只有在某个list的人才可以加入, 他还准备移植到c sharp平台 > 蒙他慷慨, 我把他的代码放上来有兴趣的可以看一下,可能缩进有些问题. > Python 3原来是你创建的啊,我加上,但是说不接受我的加入请求,后来就没试。 -- I like python! My Donews Blog: http://www.donews.net/limodou
2005年09月05日 星期一 08:25
不会吧,方便的话再加一次试试, 应该是那个bot自己网络的问题,自己断开了 在 05-9-5,limodou<limodou at gmail.com> 写道: > 在 05-9-5,saddle<saddle at gmail.com> 写道: > > 我也创建了一个 python3 at gmail.com > > 不过好像网络不太好, 看到limodou加入了,后来bot自己死了又启动,就看不到limodou了。。。 > > 有人已经改进了代码, 可以只有在某个list的人才可以加入, 他还准备移植到c sharp平台 > > 蒙他慷慨, 我把他的代码放上来有兴趣的可以看一下,可能缩进有些问题. > > > > Python 3原来是你创建的啊,我加上,但是说不接受我的加入请求,后来就没试。 > > -- > I like python! > My Donews Blog: http://www.donews.net/limodou > > _______________________________________________ > python-chinese list > python-chinese at lists.python.cn > http://python.cn/mailman/listinfo/python-chinese > > >
2005年09月05日 星期一 09:39
Ó¦¸ÃÊÇÓÐ bug Îҵijö´íÐÅÏ¢£º D:\python>python confbot.py therothinator at gmail.com offline None None oicq2005 at gmail.com offline None None michaelmurdock at gmail.com offline None None moonese at gmail.com offline None None palermo82 at gmail.com offline None None david.dong.liu at gmail.com offline None None liuhongru at gmail.com offline None None shijiakang at gmail.com offline None None isomer at gmail.com offline None None cgwfnh at gmail.com offline None None newblue at gmail.com offline None None wangcs at gmail.com offline None None ernie.s at gmail.com offline None None Updated directory site 2005-09-05 09:37:58å ç»ä½ 个æç¨å§ï¼å°åå¦ä¸ status: None oicq2005 at gmail.com 2005-09-05 09:38:03 http://www.51nb.com/modules.php?name=Sections&op;= viewarticle&artid;=309 status: None oicq2005 at gmail.com Traceback (most recent call last): File "confbot.py", line 307, in ? con.process(1) File "D:\python\xmlstream.py", line 459, in process if not len(self.read()): # length of 0 means disconnect File "D:\python\xmlstream.py", line 398, in read data_in=data_in+self._sslObj.read(BLOCK_SIZE).decode('utf-8') socket.sslerror: (6, 'TLS/SSL connection has been closed') Çë´ó¼Ò°ïÖú½â¾ö¡£ On 9/5/05, saddle <saddle at gmail.com> wrote: > > ²»»á°É£¬·½±ãµÄ»°ÔÙ¼ÓÒ»´ÎÊÔÊÔ£¬ Ó¦¸ÃÊÇÄǸöbot×Ô¼ºÍøÂçµÄÎÊÌ⣬×Ô¼º¶Ï¿ªÁË > > ÔÚ 05-9-5£¬limodou<limodou at gmail.com> дµÀ£º > > ÔÚ 05-9-5£¬saddle<saddle at gmail.com> дµÀ£º > > > ÎÒÒ²´´½¨ÁËÒ»¸ö python3 at gmail.com > > > ²»¹ýºÃÏñÍøÂ粻̫ºÃ£¬ ¿´µ½limodou¼ÓÈëÁË£¬ºóÀ´bot×Ô¼ºËÀÁËÓÖÆô¶¯£¬¾Í¿´²»µ½limodouÁË¡£¡£¡£ > > > ÓÐÈËÒѾ¸Ä½øÁË´úÂ룬 ¿ÉÒÔÖ»ÓÐÔÚij¸ölistµÄÈ˲ſÉÒÔ¼ÓÈ룬 Ëû»¹×¼±¸ÒÆÖ²µ½c sharpƽ̨ > > > ÃÉËû¿¶¿®£¬ ÎÒ°ÑËûµÄ´úÂë·ÅÉÏÀ´ÓÐÐËȤµÄ¿ÉÒÔ¿´Ò»ÏÂ,¿ÉÄÜËõ½øÓÐЩÎÊÌâ. > > > > > > > Python 3ÔÀ´ÊÇÄã´´½¨µÄ°¡£¬ÎÒ¼ÓÉÏ£¬µ«ÊÇ˵²»½ÓÊÜÎҵļÓÈëÇëÇ󣬺óÀ´¾ÍûÊÔ¡£ > > > > -- > > I like python! > > My Donews Blog: http://www.donews.net/limodou > > > > _______________________________________________ > > python-chinese list > > python-chinese at lists.python.cn > > http://python.cn/mailman/listinfo/python-chinese > > > > > > > > _______________________________________________ > python-chinese list > python-chinese at lists.python.cn > http://python.cn/mailman/listinfo/python-chinese > > > -- ÎÒҪȥ¹ðÁÖ http://www.domolo.com -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20050905/3e665ade/attachment.html
2005年09月05日 星期一 09:47
1NogMDUtOS01o6x0cmFuc2J1ZXJnIHRpYW48YWNjZXNpbmUucHl0aG9uQGdtYWlsLmNvbT4g0LS1 wKO6Cj4g06a4w8rH09AgYnVnICAgztK1xLP2tO3Qxc+io7oKPiAgCj4gIAo+ICAKPiAgRDpccHl0 aG9uPnB5dGhvbiBjb25mYm90LnB5Cj4gIHRoZXJvdGhpbmF0b3JAZ21haWwuY29tIG9mZmxpbmUg Tm9uZSBOb25lCj4gIG9pY3EyMDA1QGdtYWlsLmNvbSBvZmZsaW5lIE5vbmUgTm9uZQo+ICBtaWNo YWVsbXVyZG9ja0BnbWFpbC5jb20gb2ZmbGluZSBOb25lIE5vbmUKPiAgbW9vbmVzZUBnbWFpbC5j b20gb2ZmbGluZSBOb25lIE5vbmUKPiAgcGFsZXJtbzgyQGdtYWlsLmNvbSBvZmZsaW5lIE5vbmUg Tm9uZQo+ICBkYXZpZC5kb25nLmxpdUBnbWFpbC5jb20gb2ZmbGluZSBOb25lIE5vbmUKPiAgbGl1 aG9uZ3J1QGdtYWlsLmNvbSBvZmZsaW5lIE5vbmUgTm9uZQo+ICBzaGlqaWFrYW5nQGdtYWlsLmNv bSBvZmZsaW5lIE5vbmUgTm9uZQo+ICBpc29tZXJAZ21haWwuY29tIG9mZmxpbmUgTm9uZSBOb25l Cj4gIGNnd2ZuaEBnbWFpbC5jb20gb2ZmbGluZSBOb25lIE5vbmUKPiAgbmV3Ymx1ZUBnbWFpbC5j b20gb2ZmbGluZSBOb25lIE5vbmUKPiAgd2FuZ2NzQGdtYWlsLmNvbSBvZmZsaW5lIE5vbmUgTm9u ZQo+ICBlcm5pZS5zQGdtYWlsLmNvbSBvZmZsaW5lIE5vbmUgTm9uZQo+ICBVcGRhdGVkIGRpcmVj dG9yeSBzaXRlCj4gIDIwMDUtMDktMDUgMDk6Mzc6NTggPG9pY3EyMDA1PiDlhYjnu5nkvaDkuKrm lZnnqIvlkKfvvIzlnLDlnYDlpoLkuIsKPiAgc3RhdHVzOiBOb25lIG9pY3EyMDA1QGdtYWlsLmNv bQo+ICAyMDA1LTA5LTA1IDA5OjM4OjAzIDxvaWNxMjAwNT4KPiBodHRwOi8vd3d3LjUxbmIuY29t L21vZHVsZXMucGhwP25hbWU9U2VjdGlvbnMmb3A9Cj4gIHZpZXdhcnRpY2xlJmFydGlkPTMwOQo+ ICBzdGF0dXM6IE5vbmUgb2ljcTIwMDVAZ21haWwuY29tCj4gIFRyYWNlYmFjayAobW9zdCByZWNl bnQgY2FsbCBsYXN0KToKPiAgICBGaWxlICJjb25mYm90LnB5IiwgbGluZSAzMDcsIGluID8KPiAg ICAgIGNvbi5wcm9jZXNzKDEpCj4gICAgRmlsZSAiRDpccHl0aG9uXHhtbHN0cmVhbS5weSIsIGxp bmUgNDU5LCBpbiBwcm9jZXNzCj4gICAgICBpZiBub3QgbGVuKHNlbGYucmVhZCgpKTogIyBsZW5n dGggb2YgMCBtZWFucyBkaXNjb25uZWN0Cj4gICAgRmlsZSAiRDpccHl0aG9uXHhtbHN0cmVhbS5w eSIsIGxpbmUgMzk4LCBpbiByZWFkCj4gICAgIAo+IGRhdGFfaW49ZGF0YV9pbitzZWxmLl9zc2xP YmoucmVhZChCTE9DS19TSVpFKS5kZWNvZGUoJ3V0Zi04JykKPiAgc29ja2V0LnNzbGVycm9yOiAo NiwgJ1RMUy9TU0wgY29ubmVjdGlvbiBoYXMgYmVlbiBjbG9zZWQnKQo+ICAKCs34wueyu87ItqjB qr3Tts/By6GjCgotLSAKSSBsaWtlIHB5dGhvbiEgCk15IERvbmV3cyBCbG9nOiBodHRwOi8vd3d3 LmRvbmV3cy5uZXQvbGltb2RvdQo=
2005年09月05日 星期一 10:17
就是pyqq好像没有动静了, 不过可以用这个bot来作qq的代理 -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20050905/3209c5fc/attachment.htm
2005年09月05日 星期一 10:38
在 05-9-5,panhudie<nirvana117 at gmail.com> 写道: > > 就是pyqq好像没有动静了, 不过可以用这个bot来作qq的代理 一定是跟腾讯谈崩了,那帮人不是好鸟没有办法理性合作的………… -- [Time is unimportant, only life important!]
Zeuux © 2025
京ICP备05028076号