# -*- coding: utf-8 -*- from qqbot import QQBot, RunBot class MyQQBot(QQBot): def onQQMessage(self, contact, member, content): if content == '-hello': self.SendTo(contact, '你好,我是QQ机器人') elif content == '-stop': self.SendTo(contact, 'QQ机器人已关闭') self.Stop() RunBot(MyQQBot)
else: bot.SendTo(contact, member.name + '刷新好友失败') elif tmp[0] == "@qqbot机器人" and tmp[1] == "刷新讨论组": qq = qqinfo(member, bot) if qq in adminqq: bot.SendTo(contact, member.name + discuss(bot)) elif tmp[0] == "@qqbot机器人" and tmp[1] == "刷新组": qq = qqinfo(member, bot) if qq in adminqq: bot.SendTo(contact, member.name + group(bot)) elif tmp[0] == "@qqbot机器人" and tmp[1] == "刷新所有": qq = qqinfo(member, bot) if qq in adminqq: if bot.Update('buddy') and qq in adminqq: bot.SendTo(contact, member.name + '刷新好友成功') else: bot.SendTo(contact, member.name + '刷新好友失败') bot.SendTo(contact, member.name + group(bot)) bot.SendTo(contact, member.name + discuss(bot)) elif tmp[0] == "@qqbot机器人" and tmp[1] == "格式": bot.SendTo( contact, member.name + ",格式为:\"@qqbot机器人 添加OAIP *.*.*.*\",没有检测到IP,多个ip用空格隔开") if __name__ == '__main__': RunBot()
def runQQ(): RunBot()
# bot : QQBot 对象 pass def onStartupComplete(bot): # 启动工作全部完成时被调用(此时已登录成功,且已开始监听消息和 qterm 客户端命令) # bot : QQBot 对象 pass def onFetchComplete(bot): # 完成一轮联系人列表刷新时被调用 # bot : QQBot 对象 pass # # ================================================================= # # (3) QQbot初始化 # # 初始化QQbot的启动参数。 for argItems in customArgs: sys.argv.append(str(argItems)) # 确保传入的数据的正确性。 # 避免自动增加引起错误的sys.argv中的参数。 # 由于PyCharm调试器的一些特性,需要增加这个参数来绕过qqbotcls.py中的runBot()中的增加参数的过程。 # 如果不绕过那个增加参数的过程,QQbot启动之后会被增加两个无效的参数,这会导致QQbot异常退出。 sys.argv.append('--subprocessCall') # 正式启动QQbot。 RunBot(MyQQBotTest, user=user, qq=qq) # 注意: 此函数将永远不会有机会返回,因此在这一行之后的代码都不会被执行。
import os import sys here = os.path.abspath(os.path.dirname(__file__)) sys.path.append(here) from IRCServer import IRCServer from qqbot import QQBot, RunBot from qqbot.mainloop import StartDaemonThread class QQBotToIRCAdapter(QQBot): def __init__(self): super(QQBot, self) self.server = None def onQQMessage(self, contact, member, content): content = content.replace('<', '<') content = content.replace('>', '>') if self.server: self.server.onQQMessage(contact, member, content) def onStartupComplete(self): ip, port = (self.conf.IRCServerAddress.split(':', 1) + [6667])[0:2] self.server = IRCServer(self, (ip, int(port))) StartDaemonThread(self.server.serve_forever) if __name__ == '__main__': RunBot(QQBotToIRCAdapter)
@site: xsren.me @version: 1.0 @license: Apache Licence @file: my_qqbot.py @time: 2017/5/29 下午4:54 """ from qqbot import QQBotSlot as qqbotslot, RunBot ts = [u'NB田',u'田NB',u'田BN'] @qqbotslot def onQQMessage(bot, contact, member, content): print contact, content, member # if content == '-hello': # bot.SendTo(contact, '你好,我是QQ机器人') # elif content == '-stop': # bot.SendTo(contact, 'QQ机器人已关闭') # bot.Stop() if u"矿大703" in contact.name.decode('utf8'): if u"见龙在田" in member.nick.decode('utf8'): bot.SendTo(contact, content) for t in ts: bot.SendTo(contact, t) if __name__ == '__main__': RunBot(qq="1028730267")
self.repCounter += 1 print(self.repCounter) else: if(self.repCounter > 3): self.SendTo(contact, '你们的复读坚持了' + str(self.repCounter + 1) + '次~人类的本质就是个复读机!') self.repCounter = 0 if(self.repCounter == 3): self.SendTo(contact, content) self.prevMsg = curMsg ''' #open the info table RunBot(QQBotWithState, qq='3407757156', user=None) ''' Goal: 1. Nilk will be the only authorized person who has the ability to edit the response of it. 2. Can troll in the group chat 3. When called out by @, provide proper info ''' ''' @myqqbot.On('qqmessage') def handler(bot, message): #editing if (message.contact.qq == '1259276249'): bot.SendTo(message.contact, 'copy that') if (message.content == '-stop'): bot.SendTo(message.contact, 'QQ Bot terminated') bot.Stop()
f"天气状况:{tomorrow['type']}\n" \ f"最高温度:{tomorrow['high']}\n" \ f"最低温度:{tomorrow['low']}\n" \ f"熊猫提醒: {info}\n" \ f"官方提醒: {xiaoxi}" return xiangqing # 单独发 @qqbotsched(hour='07', minute='25') def mytask(bot): gl = bot.List('buddy', 'A大白兔奶糖') if gl is not None: for group in gl: bot.SendTo(group, str(weather('南京'))) @qqbotslot def onQQMessage(bot, contact, member, content): if '天气' in content: Addrs = content[2:] bot.SendTo(contact, str(weather(Addrs))) elif bot.isMe(contact, member): print('This is me') if __name__ == '__main__': # print(weather()) RunBot(["-u", "somebody"])
}: if g is not None: timegogao = bot.List('group', g) if timegogao is not None: for group in timegogao: bot.SendTo( group, ''' material机器人(请回复数字) 具体情况请找开发者!qq:412905523 不知道机器人回复规则请回复:命令 @我(艾特我)可以和我尬聊 1:qq微信智能机器人定制,开发(私聊,群聊) 2:zip/excel/rar/压缩包文件类密码找回破解 3:非文件类密码找回破解(包括验证码) 4:程序软件开发(java,python,批处理,html(css)) 5:破解,逆向编程apk,exe,pyc等 6:外挂插件开发 7:网站/服务器建设开发,漏洞维修 material机器人(请回复数字) 具体情况请找开发者!qq:412905523 不知道机器人回复规则请回复:命令 @我(艾特我)可以和我尬聊 官方总群:664808953 ''') if __name__ == '__main__': RunBot(['-q', '2758678389'])
# 本段示例: 每小时执行一次的任务。(在0分0秒时) # bot : QQBot 对象 import time DEBUG('1hour passed: ' + time.asctime()) @qqbotsched(hour='0', minute='0', second='0') def mytask(bot): # 本段示例: 凌晨0点0分0秒时执行任务。 # bot : QQBot 对象 import time DEBUG('MidNight passed: ' + time.asctime()) # # ================================================================= # # (3) QQbot初始化 # # 初始化QQbot的启动参数。 for argItems in customArgs: sys.argv.append(str(argItems)) # 确保传入的数据的正确性。 # 避免自动增加引起错误的sys.argv中的参数。 # 由于PyCharm调试器的一些特性,需要增加这个参数来绕过qqbotcls.py中的runBot()中的增加参数的过程。 # 如果不绕过那个增加参数的过程,QQbot启动之后会被增加两个无效的参数,这会导致QQbot异常退出。 sys.argv.append('--subprocessCall') # 正式启动QQbot。 RunBot(user=user, qq=qq) # 注意: 此函数将永远不会有机会返回,因此在这一行之后的代码都不会被执行。
elif ('瓜大小雷锋' in str(contact)) and ('Q' in content) and ( 'A' in content) and ( (':' in content) or (':' in content)) and str(content).count('Q') == 1: # 小雷锋运营群可以直接添加问题库QA addQAFile = open("/home/qqbot/qa.txt", "ab") addQAFile.write('\n' + content) bot.SendTo(contact, 'QA添加成功!') bot.SendTo(contact, content) addQAFile.close() elif tmp == 0 and ('@ME' in content): if ('党' in content) or ('中国' in content) or ('台湾' in content): bot.SendTo(contact, '小雷锋是热爱祖国的好孩子/可爱让我们不要谈论这些话题了/可爱') BotAnswer += '小雷锋是热爱祖国的好孩子/可爱让我们不要谈论这些话题了/可爱' + '\n' elif ('母亲' in content) or ('妈妈' in content): bot.SendTo(contact, '不告诉你,略略略') BotAnswer += '不告诉你,略略略' + '\n' elif ('小V' in str(member)): return else: tmpAns3 = talk(content, contact.qq) bot.SendTo(contact, '@' + member.name + ' ' + tmpAns3) BotAnswer += '@' + member.name + ' ' + tmpAns3 + '\n' else: return () RecordFile.write(BotAnswer + '\n') RecordFile.close() RunBot() # 启动qqbot,如果是插件模式请注释掉此行
def onQQMessage(bot, contact, member, content): # 当收到 QQ 消息时被调用 # bot : QQBot 对象,提供 List/SendTo/Stop/Restart 四个接口,详见文档第五节 # contact : QContact 对象,消息的发送者,具有 ctype/qq/uin/name/nick/mark/card 属性,这些属性都是 str 对象 # member : QContact 对象,仅当本消息为 群或讨论组 消息时有效,代表实际发消息的成员 # content : str 对象,消息内容 if contact.ctype != 'buddy': DEBUG("onQQMessage: ctype=" + contact.ctype + " member=(qq=" + member.qq + ", uin=" + str(member.uin) + ", name=" + member.name + ') uin=' + contact.uin + ' qq=' + contact.qq + ' name=' + contact.name) else: DEBUG("onQQMessage: ctype=" + contact.ctype + 'uin=' + contact.uin + ' qq=' + contact.qq + ' name=' + contact.name) pass @qqbotslot def onNewContact(bot, contact, owner): # 当新增 好友/群/讨论组/群成员/讨论组成员 时被调用 # bot : QQBot 对象 # contact : QContact 对象,代表新增的联系人 # owner : QContact 对象,仅在新增 群成员/讨论组成员 时有效,代表新增成员所在的 群/讨论组 pass @qqbotslot def onLostContact(bot, contact, owner): # 当失去 好友/群/讨论组/群成员/讨论组成员 时被调用 # bot : QQBot 对象 # contact : QContact 对象,代表失去的联系人 # owner : QContact 对象,仅在失去 群成员/讨论组成员 时有效,代表失去成员所在的 群/讨论组 pass @qqbotslot def onInterval(bot): # 每隔 5 分钟被调用 # bot : QQBot 对象 pass @qqbotslot def onStartupComplete(bot): # 启动工作全部完成时被调用(此时已登录成功,且已开始监听消息和 qterm 客户端命令) # bot : QQBot 对象 pass @qqbotslot def onFetchComplete(bot): # 完成一轮联系人列表刷新时被调用 # bot : QQBot 对象 pass # QQbot定时任务功能 # 本段函数可以多次出现。 # 关于此功能的详细说明请参见:https://github.com/pandolia/qqbot#定制定时任务 @qqbotsched(minute='*/1', second='0') def mytask(bot): # 本段示例: 每分钟执行一次的任务。(在0秒时) # bot : QQBot 对象 import time DEBUG('1min passed: '+time.asctime()) @qqbotsched(hour='*/1',minute='0', second='0') def mytask(bot): # 本段示例: 每小时执行一次的任务。(在0分0秒时) # bot : QQBot 对象 import time DEBUG('1hour passed: '+time.asctime()) @qqbotsched(hour='0',minute='0', second='0') def mytask(bot): # 本段示例: 凌晨0点0分0秒时执行任务。 # bot : QQBot 对象 import time DEBUG('MidNight passed: '+time.asctime()) # # ================================================================= # # (3) QQbot初始化 # # 初始化QQbot的启动参数。 for argItems in customArgs: sys.argv.append(str(argItems)) # 确保传入的数据的正确性。 # 避免自动增加引起错误的sys.argv中的参数。 # 由于PyCharm调试器的一些特性,需要增加这个参数来绕过qqbotcls.py中的runBot()中的增加参数的过程。 # 如果不绕过那个增加参数的过程,QQbot启动之后会被增加两个无效的参数,这会导致QQbot异常退出。 sys.argv.append('--subprocessCall') # 正式启动QQbot。 RunBot(user=user, qq=qq)
def onNewContact(bot, contact, owner): #exec when there is new member joining owner print('onNewContact evoked') if (owner is None): return if (owner.qq == GROUP_NUMBER): test_group = bot.List('group', GROUP_NUMBER)[0] new_member = bot.List(test_group, 'qq=' + str(contact.qq))[0] bot.SendTo(owner, '欢迎新dalao~'.encode('utf-8')) bot.SendTo( owner, 'Hello '.encode('utf-8') + contact.card.encode('utf-8') + '. 我是翔鹤,有什么问题可以at我,如果对于我的功能有什么建议的话请找nilk.'.encode('utf-8')) #open the info table RunBot(qq='3407757156', user='******') ''' Goal: 1. Nilk will be the only authorized person who has the ability to edit the response of it. 2. Can troll in the group chat 3. When called out by @, provide proper info ''' ''' TODO: 0. try to trim the @me before msg in group chat(done) 1.点歌,发url 3.氪金信息 4.crawl for info, instead of hard coded csv(done) 5.今日改修,今日修炼场,今日种火 6.定时提醒清本,上线清任务领奖励(done)
f = open('./message', 'a', encoding='utf-8') f.write(message + "\r") f.close() # print(tuling(content)) message = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime( )) + ' 来自 群<%s> 成员<%s> 的消息: "%s"' % (groupName, member.name, content) f = open('./message2', 'a', encoding='utf-8') f.write(message + "\r") f.close() if content == '-hello': bot.SendTo(contact, '你好,有事吗?') elif content == '-stop': bot.SendTo(contact, '已下线') bot.Stop() if __name__ == '__main__': RunBot(['-q', '1095073158']) # 使用contact.__dict__获得对象的属性 # {'qq': '#NULL', 'uin': '3285709011', 'nick': 'mytest2', 'mark': '','name': 'mytest2', 'gcode': '3285709011', 'ctype': 'group'} # uin唯一标识,群聊天时标识群,一对一私聊时标识qq。nick是群名称,ctype说明本次消息是何种类型的,group表示是群,buddy表示是私聊。 # {'qq': '#NULL', 'uin': '3012699167', 'nick': 'XX', 'mark': '#NULL', # 'card': 'XXXX', 'name': 'XXXX', 'join_time': -1, 'last_speak_time': -1, # 'role': '#NULL', 'role_id': -1, 'is_buddy': -1, 'level': -1, 'levelname': '#NULL', # 'point': -1, 'ctype': 'group-member'} # # 当私聊时此对象为NoneType,uin唯一标识群成员,nick标识qq昵称,card表示群聊天里发消息的那个qq昵称备注。
def starQQ(): RunBot()
DEBUG('MidNight passed: '+time.asctime()) # # 在此插入任何需要的初始化的部分。这里的代码会在作为插件和作为机器人启动器时使用。 pass # # ================================================================= # # (3) QQbot初始化 # # 检测加载方式。如果是插件方式加载则忽略参数处理与机器人启动过程。 if __name__ == "__main__": # 正在以启动器方式启动。 print("############ PycharmLoader 正在以启动器方式启动。 ############") # 初始化QQbot的启动参数。 for argItems in customArgs: sys.argv.append(str(argItems)) # 确保传入的数据的正确性。 # 避免自动增加引起错误的sys.argv中的参数。 # 由于PyCharm调试器的一些特性,需要增加这个参数来绕过qqbotcls.py中的runBot()中的增加参数的过程。 # 如果不绕过那个增加参数的过程,QQbot启动之后会被增加两个无效的参数,这会导致QQbot异常退出。 sys.argv.append('--subprocessCall') # 正式启动QQbot。 RunBot(user=user, qq=qq) # 注意: 此函数将永远不会有机会返回。 else: # 正在以插件方式启动。 print("############# PycharmLoader 正在以插件方式启动。 #############") pass