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实现从百度API获取天气的方法
Mar 11 Python
Python中subprocess的简单使用示例
Jul 28 Python
详解python时间模块中的datetime模块
Jan 13 Python
python Django框架实现自定义表单提交
Mar 25 Python
浅谈python新手中常见的疑惑及解答
Jun 14 Python
Python实现的计算马氏距离算法示例
Apr 03 Python
无法使用pip命令安装python第三方库的原因及解决方法
Jun 12 Python
Python实现计算长方形面积(带参数函数demo)
Jan 18 Python
Python2 与Python3的版本区别实例分析
Mar 30 Python
Pycharm配置PyQt5环境的教程
Apr 02 Python
python自动打开浏览器下载zip并提取内容写入excel
Jan 04 Python
python3使用diagrams绘制架构图的步骤
Apr 08 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
如何开发一个虚拟域名系统
2006/10/09 PHP
phpstorm编辑器乱码问题解决
2014/12/01 PHP
PHP数组函数array_multisort()用法实例分析
2016/04/02 PHP
CI框架整合smarty步骤详解
2016/05/19 PHP
PHP实现执行外部程序的方法详解
2017/08/17 PHP
浅析PHP开发规范
2018/02/05 PHP
用javascript实现画板的代码
2007/09/05 Javascript
js下用gb2312编码解码实现方法
2009/12/31 Javascript
JS 跳转页面延迟2种方法
2013/03/29 Javascript
FF IE浏览器修改标签透明度的方法
2014/01/27 Javascript
node.js中的events.emitter.once方法使用说明
2014/12/10 Javascript
常用的JS验证和函数汇总
2014/12/23 Javascript
跟我学习javascript的基本类型和引用类型
2015/11/16 Javascript
JavaScript在控件上添加倒计时功能的实现代码
2017/07/04 Javascript
jQuery实现文件编码成base64并通过AJAX上传的方法
2018/04/12 jQuery
微信小程序实现长按删除图片的示例
2018/05/18 Javascript
JavaScript+H5实现微信摇一摇功能
2018/05/23 Javascript
vue-simple-uploader上传成功之后的response获取代码
2020/09/07 Javascript
跟老齐学Python之模块的加载
2014/10/24 Python
Python的Django REST框架中的序列化及请求和返回
2016/04/11 Python
Python输出各行命令详解
2018/02/01 Python
Python Web程序部署到Ubuntu服务器上的方法
2018/02/22 Python
深入flask之异步非堵塞实现代码示例
2018/07/31 Python
Python异常处理操作实例详解
2018/08/28 Python
python 3调用百度OCR API实现剪贴板文字识别
2018/09/04 Python
python selenium 弹出框处理的实现
2019/02/26 Python
使用Django和Postgres进行全文搜索的实例代码
2020/02/13 Python
python右对齐的实例方法
2020/07/05 Python
CSS3让登陆面板3D旋转起来
2016/05/03 HTML / CSS
HTML5中使用postMessage实现Ajax跨域请求的方法
2016/04/19 HTML / CSS
澳大利亚家用电器在线商店:Billy Guyatts
2020/05/05 全球购物
中国梦我的梦演讲稿
2014/04/23 职场文书
干部选拔任用方案
2014/05/26 职场文书
学习党的群众路线对照检查材料
2014/09/29 职场文书
租车协议书
2015/01/27 职场文书
电影开国大典观后感
2015/06/04 职场文书