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 XML RPC服务器端和客户端实例
Nov 22 Python
Python MySQLdb模块连接操作mysql数据库实例
Apr 08 Python
Python实现以时间换空间的缓存替换算法
Feb 19 Python
Python删除Java源文件中全部注释的实现方法
Aug 30 Python
深入理解Django的中间件middleware
Mar 14 Python
Python实现修改文件内容的方法分析
Mar 25 Python
使用Python处理BAM的方法
Sep 28 Python
python学生管理系统学习笔记
Mar 19 Python
python selenium循环登陆网站的实现
Nov 04 Python
Matplotlib.pyplot 三维绘图的实现示例
Jul 28 Python
python Selenium 库的使用技巧
Oct 16 Python
如何理解python接口自动化之logging日志模块
Jun 15 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上传文件的增强函数
2010/07/21 PHP
PHP实现对站点内容外部链接的过滤方法
2014/09/10 PHP
php源码分析之DZX1.5随机数函数random用法
2015/06/17 PHP
详解Yii2.0使用AR联表查询实例
2017/06/16 PHP
JavaScript中获取元素索引的函数
2010/09/10 Javascript
Jquery常用技巧收集整理篇
2010/11/14 Javascript
小试JQuery的AutoComplete插件
2011/05/04 Javascript
Jquery中的层次选择器与find()的区别示例介绍
2014/02/20 Javascript
纯js实现仿QQ邮箱弹出确认框
2015/04/29 Javascript
Javascript实现可旋转的圆圈实例代码
2015/08/04 Javascript
省市二级联动小案例讲解
2016/07/24 Javascript
详解数组Array.sort()排序的方法
2020/05/09 Javascript
js弹出窗口简单实现代码
2017/03/22 Javascript
AngularJS 单选框及多选框的双向动态绑定
2017/04/20 Javascript
angularjs定时任务的设置与清除示例
2017/06/02 Javascript
微信小程序引用公共js里的方法的实例详解
2017/08/17 Javascript
vue组件之Alert的实现代码
2017/10/17 Javascript
Element-ui table中过滤条件变更表格内容的方法
2018/03/02 Javascript
React 组件渲染和更新的实现代码示例
2019/02/21 Javascript
微信小程序代码上传、审核发布小程序
2019/05/18 Javascript
JS实现简易留言板特效
2019/12/23 Javascript
JavaScript forEach中return失效问题解决方案
2020/06/01 Javascript
简介Python的collections模块中defaultdict类型的用法
2016/07/07 Python
Python实现的简单读写csv文件操作示例
2018/07/12 Python
python3 读取Excel表格中的数据
2018/10/16 Python
Python Django实现layui风格+django分页功能的例子
2019/08/29 Python
Keras实现支持masking的Flatten层代码
2020/06/16 Python
PyCharm2020.3.2安装超详细教程
2021/02/08 Python
英国人最爱的饰品网站:Accessorize
2016/08/22 全球购物
联想新西兰官方网站:Lenovo New Zealand
2018/10/30 全球购物
NFL欧洲商店(德国):NFL Europe Shop DE
2018/11/03 全球购物
Boolean b = new Boolean(“abcde”); 会编译错误码
2013/11/27 面试题
群众路线教育实践活动对照检查材料思想汇报(副处级领导)
2014/10/04 职场文书
行政二审代理词
2015/05/25 职场文书
2015年超市工作总结范文
2015/05/26 职场文书
Spring Boot实战解决高并发数据入库之 Redis 缓存+MySQL 批量入库问题
2022/02/12 Redis