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 获取 Linux 系统信息的代码
Jul 13 Python
Python文件夹与文件的操作实现代码
Jul 13 Python
Python实现SMTP发送邮件详细教程
Mar 02 Python
python 数据清洗之数据合并、转换、过滤、排序
Feb 12 Python
Python 中开发pattern的string模板(template) 实例详解
Apr 01 Python
python读取LMDB中图像的方法
Jul 02 Python
python实现将多个文件分配到多个文件夹的方法
Jan 07 Python
详解django中url路由配置及渲染方式
Feb 25 Python
用Python批量把文件复制到另一个文件夹的实现方法
Aug 16 Python
对Django的restful用法详解(自带的增删改查)
Aug 28 Python
python中把元组转换为namedtuple方法
Dec 09 Python
Python中基础数据类型 set集合知识点总结
Aug 02 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
php5.2.0内存管理改进
2007/01/22 PHP
php实现图片添加水印功能
2014/02/13 PHP
Laravel 5.3 学习笔记之 错误&日志
2016/08/28 PHP
PHP CURL采集百度搜寻结果图片不显示问题的解决方法
2017/02/03 PHP
PHP调用接口用post方法传送json数据的实例
2018/05/31 PHP
模仿jQuery each函数的链式调用
2009/07/22 Javascript
图片无缝滚动代码(向左/向下/向上)
2013/04/10 Javascript
javascript实现浏览器窗口传递参数的方法
2014/09/03 Javascript
JavaScript中字符串(string)转json的2种方法
2015/06/25 Javascript
Vue2实现组件props双向绑定
2016/12/02 Javascript
js获取地址栏参数的两种方法
2017/06/27 Javascript
vue按需加载实例详解
2019/09/06 Javascript
基于vue-cli3和element实现登陆页面
2019/11/13 Javascript
Javascript var变量删除原理及实现
2020/08/26 Javascript
简单介绍Python中的JSON使用
2015/04/28 Python
深入理解NumPy简明教程---数组1
2016/12/17 Python
浅谈numpy库的常用基本操作方法
2018/01/09 Python
python时间日期函数与利用pandas进行时间序列处理详解
2018/03/13 Python
python如何通过twisted实现数据库异步插入
2018/03/20 Python
python中pip的安装与使用教程
2018/08/10 Python
pandas 选取行和列数据的方法详解
2019/08/08 Python
python文字转语音的实例代码分析
2019/11/12 Python
tensorflow从ckpt和从.pb文件读取变量的值方式
2020/05/26 Python
学python需要去培训机构吗
2020/07/01 Python
selenium+headless chrome爬虫的实现示例
2021/01/08 Python
HTML5移动端开发中的Viewport标签及相关CSS用法解析
2016/04/15 HTML / CSS
Linux内核产生并发的原因
2012/07/13 面试题
一套软件测试笔试题
2014/07/25 面试题
学校经典推荐信
2013/10/30 职场文书
中学教师岗位职责
2013/11/26 职场文书
大学生收银员求职信分享
2014/01/02 职场文书
践行党的群众路线心得体会
2014/11/05 职场文书
停课通知书
2015/04/24 职场文书
2015年保管员工作总结
2015/04/30 职场文书
Pytorch 如何加速Dataloader提升数据读取速度
2021/05/28 Python
python解析json数据
2022/04/29 Python