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 相关文章推荐
深入解析Python编程中JSON模块的使用
Oct 15 Python
python利用dir函数查看类中所有成员函数示例代码
Sep 08 Python
Python实现的FTP通信客户端与服务器端功能示例
Mar 28 Python
详解opencv Python特征检测及K-最近邻匹配
Jan 21 Python
python 列表输出重复值以及对应的角标方法
Jun 11 Python
Django Form 实时从数据库中获取数据的操作方法
Jul 25 Python
Python实现某论坛自动签到功能
Aug 20 Python
django中使用POST方法获取POST数据
Aug 20 Python
Pytoch之torchvision.transforms图像变换实例
Dec 30 Python
浅谈spring boot 集成 log4j 解决与logback冲突的问题
Feb 20 Python
Python多分支if语句的使用
Sep 03 Python
详解Python爬虫爬取博客园问题列表所有的问题
Jan 18 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 7.0主要新特性
2016/01/07 PHP
PHP http请求超时问题解决方案
2020/11/13 PHP
JavaScript入门教程 Cookies
2009/01/31 Javascript
javascript css在IE和Firefox中区别分析
2009/02/18 Javascript
在IE上直接编辑网页内容的js代码(IE地址栏js)
2009/04/27 Javascript
关于javascript event flow 的一个bug详解
2013/09/17 Javascript
javascript中普通函数的使用介绍
2013/12/19 Javascript
jquery获得keycode的示例代码
2013/12/30 Javascript
Vue使用vue-cli创建项目
2017/09/01 Javascript
JS中的两种数据类型及实现引用类型的深拷贝的方法
2018/08/12 Javascript
为什么说JavaScript预解释是一种毫无节操的机制详析
2018/11/18 Javascript
ES6知识点整理之模块化的应用详解
2019/04/15 Javascript
详解VUE前端按钮权限控制
2019/04/26 Javascript
layui输入框中只允许输入整数的实现方法
2019/09/18 Javascript
vue 解决computed修改data数据的问题
2019/11/06 Javascript
Vue SPA 初次进入加载动画实现代码
2019/11/14 Javascript
JS实现容器模块左右拖动效果
2020/01/14 Javascript
js构造函数constructor和原型prototype原理与用法实例分析
2020/03/02 Javascript
50行代码实现贪吃蛇(具体思路及代码)
2013/04/27 Python
一个月入门Python爬虫学习,轻松爬取大规模数据
2018/01/03 Python
Python XlsxWriter模块Chart类用法实例分析
2019/03/11 Python
python实现飞机大战游戏
2020/10/26 Python
Python中url标签使用知识点总结
2020/01/16 Python
如何基于Django实现上下文章跳转
2020/09/16 Python
scrapy实践之翻页爬取的实现
2021/01/05 Python
CSS3 绘制BMW logo实的现代码
2013/04/25 HTML / CSS
职专应届生求职信
2013/11/16 职场文书
大学秋游活动方案
2014/02/11 职场文书
车间机修工岗位职责
2014/02/28 职场文书
中介公司区域经理岗位职责范本
2014/03/02 职场文书
出国留学经济担保书
2014/04/01 职场文书
班组拓展活动方案
2014/08/14 职场文书
2015年重阳节活动主持词
2015/07/30 职场文书
读《工匠精神》有感:热爱工作,精益求精
2019/12/28 职场文书
Springboot如何同时装配两个相同类型数据库
2021/11/17 Java/Android
宝塔更新Python及Flask项目的部署
2022/04/11 Python