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 相关文章推荐
在 Django/Flask 开发服务器上使用 HTTPS
Jul 03 Python
Python的Flask框架中Flask-Admin库的简单入门指引
Apr 07 Python
python中pass语句用法实例分析
Apr 30 Python
在Django中使用Sitemap的方法讲解
Jul 22 Python
Python中的os.path路径模块中的操作方法总结
Jul 07 Python
Python实现打印螺旋矩阵功能的方法
Nov 21 Python
python3.x实现发送邮件功能
May 22 Python
基于Django框架利用Ajax实现点赞功能实例代码
Aug 19 Python
Win10系统下安装labelme及json文件批量转化方法
Jul 30 Python
查看Python依赖包及其版本号信息的方法
Aug 13 Python
使用Python项目生成所有依赖包的清单方式
Jul 13 Python
Python之字典添加元素的几种方法
Sep 30 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缓冲输出实例分析
2015/01/05 PHP
网站防止被刷票的一些思路与方法
2015/01/08 PHP
php需登录的文件上传管理系统
2020/03/21 PHP
在phpstudy集成环境下的nginx服务器下配置url重写
2019/12/02 PHP
javascript的函数
2007/01/31 Javascript
jquery制作搜狐快站页面效果示例分享
2014/02/21 Javascript
5种处理js跨域问题方法汇总
2014/12/04 Javascript
JavaScript通过元素索引号删除数组中对应元素的方法
2015/03/18 Javascript
jQuery中 delegate使用的问题
2015/07/03 Javascript
javascript自动切换焦点控制效果完整实例
2016/02/02 Javascript
js清除浏览器缓存的几种方法
2017/03/15 Javascript
xmlplus组件设计系列之文本框(TextBox)(3)
2017/05/03 Javascript
使用AngularJS编写多选按钮选中时触发指定方法的指令代码详解
2017/07/24 Javascript
jquery+css实现下拉列表功能
2017/09/03 jQuery
微信小程序App生命周期详解
2018/01/31 Javascript
vue项目关闭eslint校验
2018/03/21 Javascript
微信小程序实现手势滑动效果
2019/08/26 Javascript
[49:07]VGJ.T vs Optic Supermajor小组赛D组 BO3 第二场 6.3
2018/06/04 DOTA
利用python获得时间的实例说明
2013/03/25 Python
python开发之基于thread线程搜索本地文件的方法
2015/11/11 Python
Python双向循环链表实现方法分析
2018/07/30 Python
对python 判断数字是否小于0的方法详解
2019/01/26 Python
Python 实现黑客帝国中的字符雨的示例代码
2020/02/20 Python
python with语句的原理与用法详解
2020/03/30 Python
css3的动画特效之动画序列(animation)
2017/12/22 HTML / CSS
Fox Racing英国官网:越野摩托车和山地自行车服装
2020/02/26 全球购物
一份比较全的PHP面试题
2016/07/29 面试题
自我评价正确写法范文
2013/12/10 职场文书
禁毒宣传活动总结
2014/08/26 职场文书
运动会广播稿诗歌版
2014/09/12 职场文书
档案管理员岗位职责
2015/02/12 职场文书
校长个人总结
2015/03/03 职场文书
个人工作总结(管理人员)范文
2019/08/13 职场文书
vue实现无缝轮播效果(跑马灯)
2021/05/14 Vue.js
Windows11 Insider Preview Build 25206今日发布 更新内容汇总
2022/09/23 数码科技