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小技巧之批量抓取美女图片
Jun 06 Python
python查找目录下指定扩展名的文件实例
Apr 01 Python
wxpython中Textctrl回车事件无效的解决方法
Jul 21 Python
python 实现删除文件或文件夹实例详解
Dec 04 Python
python如何为创建大量实例节省内存
Mar 20 Python
对python list 遍历删除的正确方法详解
Jun 29 Python
详解分布式任务队列Celery使用说明
Nov 29 Python
在python中画正态分布图像的实例
Jul 08 Python
Python Django基础二之URL路由系统
Jul 18 Python
python爬虫解决验证码的思路及示例
Aug 01 Python
Python matplotlib绘制图形实例(包括点,曲线,注释和箭头)
Apr 17 Python
一篇文章搞懂python混乱的切换操作与优雅的推导式
Aug 23 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
php获取mysql字段名称和其它信息的例子
2014/04/14 PHP
php中addslashes函数与sql防注入
2014/11/17 PHP
php将csv文件导入到mysql数据库的方法
2014/12/24 PHP
Netbeans 8.2与PHP相关的新特性介绍
2016/10/08 PHP
php检查函数必传参数是否存在的实例详解
2017/08/28 PHP
PHP实现随机数字、字母的验证码功能
2018/08/01 PHP
关于PHP中interface的用处详解
2020/07/26 PHP
你的编程语言可以这样做吗?
2006/09/07 Javascript
url 编码 js url传参中文乱码解决方案
2010/04/11 Javascript
js实现单行文本向上滚动效果实例代码
2013/11/28 Javascript
jQuery使用removeClass方法删除元素指定Class的方法
2015/03/26 Javascript
jQuery实现商品活动倒计时
2015/10/16 Javascript
JavaScript的React框架中的JSX语法学习入门教程
2016/03/05 Javascript
JS中使用DOM来控制HTML元素
2016/07/31 Javascript
vue.js中指令Directives详解
2017/03/20 Javascript
ES6 javascript中Class类继承用法实例详解
2017/10/30 Javascript
Angular实现的敏感文字自动过滤与提示功能示例
2017/12/29 Javascript
Node.js利用console输出日志文件的方法示例
2018/04/27 Javascript
jQuery实现轮播图效果
2019/11/26 jQuery
Vue实现 点击显示再点击隐藏效果(点击页面空白区域也隐藏效果)
2020/01/16 Javascript
python 正则式 概述及常用字符
2009/05/07 Python
Python和perl实现批量对目录下电子书文件重命名的代码分享
2014/11/21 Python
Python中将字典转换为列表的方法
2016/09/21 Python
CentOS 6.5下安装Python 3.5.2(与Python2并存)
2017/06/05 Python
Windows下的Python 3.6.1的下载与安装图文详解(适合32位和64位)
2018/02/21 Python
浅谈python的dataframe与series的创建方法
2018/11/12 Python
python画图--输出指定像素点的颜色值方法
2019/07/03 Python
Django中的用户身份验证示例详解
2019/08/07 Python
python爬虫可以爬什么
2020/06/16 Python
celery在python爬虫中定时操作实例讲解
2020/11/27 Python
使用css3制作登录表单的步骤
2014/04/07 HTML / CSS
animation和transition的区别
2020/10/12 HTML / CSS
财务副总经理工作职责
2013/11/25 职场文书
交通安全横幅标语
2014/10/07 职场文书
Oracle11g r2 卸载干净重装的详细教程(亲测有效已重装过)
2021/06/04 Oracle