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海龟绘图实例教程
Jul 24 Python
python迭代器实例简析
Sep 25 Python
Python实现将绝对URL替换成相对URL的方法
Jun 28 Python
Python的网络编程库Gevent的安装及使用技巧
Jun 24 Python
Python pandas常用函数详解
Feb 07 Python
python计算日期之间的放假日期
Jun 05 Python
Django forms表单 select下拉框的传值实例
Jul 19 Python
pytorch中的weight-initilzation用法
Jun 24 Python
Python基础进阶之海量表情包多线程爬虫功能的实现
Dec 17 Python
python爬虫请求库httpx和parsel解析库的使用测评
May 10 Python
浅谈怎么给Python添加类型标注
Jun 08 Python
Pytorch中expand()的使用(扩展某个维度)
Jul 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
Protoss兵种介绍
2020/03/14 星际争霸
PHP 已经成熟
2006/12/04 PHP
php计算数组不为空元素个数的方法
2014/01/27 PHP
神盾加密解密教程(二)PHP 神盾解密
2014/06/08 PHP
PHP的Yii框架使用中的一些错误解决方法与建议
2015/08/21 PHP
PHP curl模拟登录带验证码的网站
2015/11/30 PHP
PHP数据库连接mysql与mysqli对比分析
2016/01/04 PHP
php while循环控制的简单实例
2016/05/30 PHP
使用ThinkPHP生成缩略图及显示
2017/04/27 PHP
ThinkPHP使用getlist方法实现数据搜索功能示例
2017/05/08 PHP
Centos7安装swoole扩展操作示例
2020/03/26 PHP
IE 下的只读 innerHTML
2009/08/21 Javascript
Jquery 表单取值赋值的一些基本操作
2009/10/11 Javascript
往光标所在位置插入值的js代码
2013/09/22 Javascript
javaScript中两个等于号和三个等于号之间的区别介绍
2014/06/27 Javascript
js实现鼠标触发图片抖动效果的方法
2015/02/27 Javascript
js实现具有高亮显示效果的多级菜单代码
2015/09/01 Javascript
浅谈Javascript数据属性与访问器属性
2016/07/26 Javascript
实例分析浏览器中“JavaScript解析器”的工作原理
2016/12/12 Javascript
80%应聘者都不及格的JS面试题
2017/03/21 Javascript
jQuery实现判断上传图片类型和大小的方法示例
2018/04/11 jQuery
小程序兼容安卓和IOS数据处理问题及坑
2018/09/18 Javascript
[06:49]2018DOTA2国际邀请赛寻真——VirtusPro傲视群雄
2018/08/12 DOTA
利用一个简单的例子窥探CPython内核的运行机制
2015/03/30 Python
Python实现简单的列表冒泡排序和反转列表操作示例
2019/07/10 Python
tensorflow常用函数API介绍
2020/04/19 Python
python安装sklearn模块的方法详解
2020/11/28 Python
python脚本使用阿里云slb对恶意攻击进行封堵的实现
2021/02/04 Python
个性化皮包、小袋、生活配件:Mon Purse
2019/03/26 全球购物
香港连卡佛百货官网:Lane Crawford
2019/09/04 全球购物
汽车维修专业个人求职信范文
2014/01/01 职场文书
大学生求职工作的自我评价
2014/02/13 职场文书
中学学校门卫岗位职责
2014/08/15 职场文书
学习优秀党员杨宗兴先进事迹材料思想汇报
2014/09/14 职场文书
2015年语文教学工作总结
2015/05/25 职场文书
幼师自荐信范文(2016推荐篇)
2016/01/28 职场文书