Python qqbot 实现qq机器人的示例代码


Posted in Python onJuly 11, 2019

qqbot 是一个用 python 实现的、基于腾讯 SmartQQ 协议的 QQ 机器人框架,可运行在 Linux 、 Windows 和 Mac OSX 平台下。

你可以通过扩展 qqbot 来实现:

  • 监控、收集 QQ 消息
  • 自动消息推送
  • 聊天机器人
  • 通过 QQ 远程控制你的设备

qqbot项目Gayhub地址:https://github.com/pandolia/qqbot 

# -*- coding: utf-8 -*-
import qqbot
from qqbot import QQBotSlot as qqbotslot, RunBot
from qqbot import _bot as bot
import time
import json
import urllib
 
 
keyList = ['捡', '丢', '饭卡', ] # 匹配关键字
 
def check(keylist, str):
 for key in keyList:
  if (key in str):
   return True
 return False
 
@qqbot.QQBotSlot
def onQQMessage(bot, contact, member, content):
 # bot: QQBot对象,提供List / SendTo / Stop / Restart等接口
 # contact: QContact对象,消息的发送者,具有ctype / qq / uin / nick / mark / card / name等属性
 # member: QContact对象,仅当本消息为群消息或讨论组消息时有效,代表实际发消息的成员
 # content: str对象,消息内容
 if '@ME' in content: # 如果有人艾特的机器人
  message = content.replace('[@ME] ', '')
  # 添加名字的ASCII码,能够进行语义的连贯,而不是突兀的开启另外一段对话
  asciistr = ''
  for i in range(len(member.name)):
   asciistr += (str(ord(member.name[i]))) # 组装名字的字符编码,尽量的是唯一的
   if i > 3:
    break
  # 调用图灵机器人,进行对话的回复,如果出现图灵机器人,替换为浮沉沉
  bot.SendTo(contact, get_message(message, int(asciistr)).replace('图灵机器人', '浮沉沉'))
 
 elif content == '-stop':
  bot.SendTo(contact, 'QQ机器人已关闭')
  bot.Stop()
 elif check(keyList, content) and member.name != '静默':
  # bot.SendTo(contact, '您发送的消息是' + content)
  datatime = time.strftime('%Y.%m.%d %H:%M:%S', time.localtime(time.time()))
  print('member =', member.name + '', 'contact =', contact.name)
  strzz = contact.name + ':' + datatime + " " + member.name + "发送消息:" + content # 组装消息
  sendMsgToGroup(strzz, ['测试数据群'], bot)
  print(strzz + " contact.mark" + contact.mark)
 
 
def sendMsgToGroup(msg, groupList, bot):
 # print('向群里发送消息')
 for group in groupList:
  print('group =', group)
  bg = bot.List('group', group)
  if bg:
   b = bg[0]
   bot.SendTo(b, msg)
 
def sendMsgToBuddy(msg, buddyList, bot):
 # print('向好友发送消息')
 for buddy in buddyList:
  print('buddy', type(buddy), buddy)
  bb = bot.List('buddy', buddy)
  if bb:
   b = bb[0]
   bot.SendTo(b, msg)
 
def main(bot):
 groupMsg = '测试消息是发送到群里面的'
 buddyMsg = '测试消息是发送给好友的'
 # print('os.getcwd()', os.getcwd())
 with open('./qq.txt', 'r', encoding='UTF-8') as fr:
  qqGroup = fr.readline().strip()
  qqBuddy = fr.readline().strip()
  print('fr', fr, '\nqqGroup =', qqGroup, '\nqqBuddy', qqBuddy)
 qqGroupList = qqGroup.split(',')
 qqBuddyList = qqBuddy.split(',')
 # sendMsgToGroup(groupMsg, qqGroupList, bot)
 # sendMsgToBuddy(buddyMsg, qqBuddyList, bot)
 
 
def get_message(message, userid):
 tuling = '2581f443bf364fd8a927fe87832e3d33' # 图灵机器人的id(用户自己创建的)
 api_url = "http://openapi.tuling123.com/openapi/api/v2" # API接口调用
 req = {
  "perception":
   {
    "inputText":
     {
      "text": message
     },
 
    "selfInfo":
     {
      "location":
       {
        "city": "深圳",
        "province": "广州",
        "street": "XXX"
       }
     }
   },
  "userInfo":
   {
    "apiKey": tuling,
    "userId": userid
   }
 }
 req = json.dumps(req).encode('utf8')
 http_post = urllib.request.Request(api_url, data=req, headers={'content-type': 'application/json'})
 response = urllib.request.urlopen(http_post) # 得到网页HTML代码
 response_str = response.read().decode('utf8') # 将网页的代码转化为UTF-8 处理 避免乱码
 response_dic = json.loads(response_str) # 将得到的json格式的信息转换为Python的字典格式
 results_text = response_dic['results'][0]['values']['text']
 return results_text
 
 
 
if __name__=='__main__':
 bot.Login(['-q', '710469775'])
 # main(bot)
 
 RunBot()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
PyQt5每天必学之切换按钮
Aug 20 Python
使用Python编写Prometheus监控的方法
Oct 15 Python
对django中render()与render_to_response()的区别详解
Oct 16 Python
详解python中的Turtle函数库
Nov 19 Python
解决PyCharm的Python.exe已经停止工作的问题
Nov 29 Python
Python 从相对路径下import的方法
Dec 04 Python
对pandas读取中文unicode的csv和添加行标题的方法详解
Dec 12 Python
python利用itertools生成密码字典并多线程撞库破解rar密码
Aug 12 Python
Python2比较当前图片跟图库哪个图片相似的方法示例
Sep 28 Python
python画图常规设置方式
Mar 05 Python
python和go语言的区别是什么
Jul 20 Python
python学习之使用Matplotlib画实时的动态折线图的示例代码
Feb 25 Python
python的一些加密方法及python 加密模块
Jul 11 #Python
kali中python版本的切换方法
Jul 11 #Python
python按比例随机切分数据的实现
Jul 11 #Python
Kali Linux安装ipython2 和 ipython3的方法
Jul 11 #Python
Python循环结构的应用场景详解
Jul 11 #Python
python列表,字典,元组简单用法示例
Jul 11 #Python
python实现数据分析与建模
Jul 11 #Python
You might like
通过php添加xml文档内容的方法
2015/01/23 PHP
php使用gearman进行任务分发操作实例详解
2020/02/26 PHP
JavaScript插入动态样式实现代码
2012/02/22 Javascript
jQuery学习之prop和attr的区别示例介绍
2013/11/15 Javascript
js实现简单锁屏功能实例
2015/05/27 Javascript
javascript高级选择器querySelector和querySelectorAll全面解析
2016/04/07 Javascript
JavaScript对象创建模式实例汇总
2016/10/03 Javascript
js实现tab切换效果
2017/02/16 Javascript
Angular获取手机验证码实现移动端登录注册功能
2017/05/17 Javascript
浅析为什么a="abc" 不等于 a=new String("abc")
2017/10/25 Javascript
js实现关闭网页出现是否离开提示
2017/12/07 Javascript
vue使用xe-utils函数库的具体方法
2018/03/06 Javascript
详解ECMAScript typeof用法
2018/07/25 Javascript
layui table 参数设置方法
2018/08/14 Javascript
微信小程序云开发之模拟后台增删改查
2019/05/16 Javascript
vue-cli配置flexible过程详解
2019/07/04 Javascript
JS设置自定义快捷键并实现图片上下左右移动
2019/10/17 Javascript
[08:08]2014DOTA2国际邀请赛中国区预选赛精彩TOPPLAY
2014/06/25 DOTA
python控制台显示时钟的示例
2014/02/24 Python
利用Python的装饰器解决Bottle框架中用户验证问题
2015/04/24 Python
Python中map,reduce,filter和sorted函数的使用方法
2015/08/17 Python
python通过zabbix api获取主机
2018/09/17 Python
Python中文编码知识点
2019/02/18 Python
Python上下文管理器类和上下文管理器装饰器contextmanager用法实例分析
2019/11/07 Python
python3获取文件中url内容并下载代码实例
2019/12/27 Python
利用python 下载bilibili视频
2020/11/13 Python
美体小铺瑞典官方网站:The Body Shop瑞典
2018/01/27 全球购物
linux面试题参考答案(11)
2016/11/26 面试题
委托书样本
2014/04/02 职场文书
青安岗事迹材料
2014/05/14 职场文书
校庆团日活动总结
2014/08/28 职场文书
2015年教师见习期工作总结
2015/05/20 职场文书
钱学森电影观后感
2015/06/04 职场文书
高一语文教学反思
2016/02/16 职场文书
css中有哪些方式可以隐藏页面元素及区别
2022/06/16 HTML / CSS
oracle设置密码复杂度及设置超时退出的功能
2022/06/28 Oracle