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处理csv数据的方法
Mar 11 Python
Python实现获取域名所用服务器的真实IP
Oct 25 Python
Python爬虫实现全国失信被执行人名单查询功能示例
May 03 Python
Python根据已知邻接矩阵绘制无向图操作示例
Jun 23 Python
python实现逐个读取txt字符并修改
Dec 24 Python
python数据挖掘需要学的内容
Jun 23 Python
pygame实现烟雨蒙蒙下彩虹雨
Nov 11 Python
无需压缩软件,用python帮你操作压缩包
Aug 17 Python
python爬取代理IP并进行有效的IP测试实现
Oct 09 Python
Django中ORM的基本使用教程
Dec 22 Python
python 通过使用Yolact训练数据集
Apr 06 Python
Python机器学习算法之决策树算法的实现与优缺点
May 13 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 zip文件解压类代码
2009/12/02 PHP
php pdo操作数据库示例
2017/03/10 PHP
JavaScript ( (__ = !$ + $)[+$] + ({} + $)[_/_] +({} + $)[_/_] )
2011/02/25 Javascript
分享27个jQuery 表单插件集合推荐
2011/04/25 Javascript
js动态拼接正则表达式的两种方法
2014/03/04 Javascript
Javascript window对象详解
2014/11/12 Javascript
JavaScript生成福利彩票双色球号码
2015/05/15 Javascript
js随机生成字母数字组合的字符串 随机动画数字
2015/09/02 Javascript
利用AJAX实现WordPress中的文章列表及评论的分页功能
2016/05/17 Javascript
JS实现HTML表格排序功能
2016/08/05 Javascript
JavaScript中校验银行卡号的实现代码
2016/12/19 Javascript
JavaScript常用正则验证函数实例小结【年龄,数字,Email,手机,URL,日期等】
2017/01/23 Javascript
BootStrap与Select2使用小结
2017/02/17 Javascript
Nodejs中使用captchapng模块生成图片验证码
2017/05/18 NodeJs
把vue-router和express项目部署到服务器的方法
2018/02/21 Javascript
JS数组方法reduce的用法实例分析
2020/03/03 Javascript
matplotlib中legend位置调整解析
2017/12/19 Python
python3.x上post发送json数据
2018/03/04 Python
django输出html内容的实例
2018/05/27 Python
Python3中bytes类型转换为str类型
2018/09/27 Python
Python socket模块实现的udp通信功能示例
2019/04/10 Python
python使用百度文字识别功能方法详解
2019/07/23 Python
Django REST Framework序列化外键获取外键的值方法
2019/07/26 Python
PyTorch中常用的激活函数的方法示例
2019/08/20 Python
django项目中新增app的2种实现方法
2020/04/01 Python
详解python os.path.exists判断文件或文件夹是否存在
2020/11/16 Python
Python self用法详解
2020/11/28 Python
详解CSS3的图层阴影和文字阴影效果使用
2016/06/09 HTML / CSS
小学生竞选班长演讲稿
2014/04/24 职场文书
医院2014国庆节活动策划方案
2014/09/21 职场文书
2014年平安创建工作总结
2014/11/24 职场文书
社区活动总结
2015/02/04 职场文书
2015年机关纠风工作总结
2015/05/15 职场文书
大学生奶茶店创业计划书
2019/06/25 职场文书
python套接字socket通信
2022/04/01 Python
Win11安装升级时提示“该电脑必须支持安全启动”
2022/04/19 数码科技