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通过floor函数舍弃小数位的方法
Mar 17 Python
python实现给数组按片赋值的方法
Jul 28 Python
python魔法方法-属性转换和类的表示详解
Jul 22 Python
Python实现简易端口扫描器代码实例
Mar 15 Python
Python探索之Metaclass初步了解
Oct 28 Python
Python中存取文件的4种不同操作
Jul 02 Python
pytorch: tensor类型的构建与相互转换实例
Jul 26 Python
Python字典创建 遍历 添加等实用基础操作技巧
Sep 13 Python
python生成每日报表数据(Excel)并邮件发送的实例
Feb 03 Python
Python中单线程、多线程和多进程的效率对比实验实例
May 14 Python
Django数据库操作之save与update的使用
Apr 01 Python
详解numpy1.19.4与python3.9版本冲突解决
Dec 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
模拟OICQ的实现思路和核心程序(二)
2006/10/09 PHP
php设计模式小结
2013/02/15 PHP
php中怎么搜索相关联数组键值及获取之
2013/10/17 PHP
JQuery 动画卷页 返回顶部 动画特效(兼容Chrome)
2010/02/15 Javascript
JS 实现图片直接下载示例代码
2013/07/22 Javascript
jQuery 无限级菜单的简单实例
2014/02/21 Javascript
提高NodeJS中SSL服务的性能
2014/07/15 NodeJs
谈谈JavaScript中function多重理解
2015/08/28 Javascript
JS遍历数组及打印数组实例分析
2016/01/21 Javascript
Vue.js系列之vue-router(上)(3)
2017/01/03 Javascript
javascript循环链表之约瑟夫环的实现方法
2017/01/16 Javascript
微信小程序开发之数据存储 参数传递 数据缓存
2017/04/13 Javascript
解决jQuery ajax动态新增节点无法触发点击事件的问题
2017/05/24 jQuery
详细分析JS函数去抖和节流
2017/12/05 Javascript
在vue中使用Autoprefixed的方法
2018/07/27 Javascript
详解mpvue scroll-view自动回弹bug解决方案
2018/10/01 Javascript
彻底揭秘keep-alive原理(小结)
2019/05/05 Javascript
JS前端知识点总结之页面加载事件,数组操作,DOM节点操作,循环和分支
2019/07/04 Javascript
vue 集成jTopo 处理方法
2019/08/07 Javascript
微信小程序 轮播图实现原理及优化详解
2019/09/29 Javascript
Vue中父子组件的值传递与方法传递
2020/09/28 Javascript
Python基础之函数用法实例详解
2014/09/10 Python
Python中input和raw_input的一点区别
2014/10/21 Python
Python实现SMTP发送邮件详细教程
2021/03/02 Python
python编写微信远程控制电脑的程序
2018/01/05 Python
Python要如何实现列表排序的几种方法
2020/02/21 Python
详解Python中的路径问题
2020/09/02 Python
土木工程专业大学毕业生求职信
2013/10/13 职场文书
财务科科长岗位职责
2014/03/10 职场文书
纪念九一八事变演讲稿:勿忘国耻
2014/09/14 职场文书
2015年远程教育工作总结
2015/05/20 职场文书
遗嘱范文
2015/08/07 职场文书
python 如何用map()函数创建多线程任务
2021/04/07 Python
用JS实现飞机大战小游戏
2021/06/09 Javascript
你知道Java Spring的两种事务吗
2022/03/16 Java/Android
解决Springboot PostMapping无法获取数据的问题
2022/05/06 Java/Android