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中的序列化存储的方法
Apr 28 Python
Python 操作MySQL详解及实例
Apr 30 Python
python的多重继承的理解
Aug 06 Python
python2 与 pyhton3的输入语句写法小结
Sep 10 Python
Python实现的排列组合、破解密码算法示例
Apr 12 Python
值得收藏的10道python 面试题
Apr 15 Python
python使用Pandas库提升项目的运行速度过程详解
Jul 12 Python
Django1.11自带分页器paginator的使用方法
Oct 31 Python
Python CSV文件模块的使用案例分析
Dec 21 Python
将python依赖包打包成window下可执行文件bat方式
Dec 26 Python
使用keras时input_shape的维度表示问题说明
Jun 29 Python
Python数据可视化之基于pyecharts实现的地理图表的绘制
Jun 10 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源代码数组统计count分析
2011/08/02 PHP
利用php实现禁用IE和火狐的缓存问题
2012/12/03 PHP
php配合jquery实现增删操作具体实例
2013/12/12 PHP
JS异常处理try..catch语句的作用和实例
2014/05/05 PHP
CentOS 上搭建 PHP7 开发测试环境
2017/02/26 PHP
laravel-admin 后台表格筛选设置默认的查询日期方法
2019/10/03 PHP
详解new function(){}和function(){}() 区别分析
2008/03/22 Javascript
一个cssQuery对象 javascript脚本实现代码
2009/07/21 Javascript
JQuery 操作select标签实现代码
2010/05/14 Javascript
无刷新预览所选择的图片示例代码
2014/04/02 Javascript
javascript手工制作悬浮菜单
2015/02/12 Javascript
jQuery获得包含margin的outerWidth和outerHeight的方法
2015/03/25 Javascript
JS中artdialog弹出框控件之提交表单思路详解
2016/04/18 Javascript
noty ? jQuery通知插件全面解析
2016/05/18 Javascript
javascript三种代码注释方法
2016/06/02 Javascript
浅谈Javascript中的函数、this以及原型
2016/10/09 Javascript
微信小程序 radio单选框组件详解及实例代码
2017/01/10 Javascript
JavaScript事件冒泡与事件捕获实例分析
2018/08/01 Javascript
jQuery轮播图实例详解
2018/08/15 jQuery
JavaScript使用面向对象实现的拖拽功能详解
2019/06/12 Javascript
vue实现输入框自动跳转功能
2020/05/20 Javascript
vc6编写python扩展的方法分享
2014/01/17 Python
Python 3.x 新特性及10大变化
2015/06/12 Python
Python序列化基础知识(json/pickle)
2017/10/19 Python
Python+matplotlib实现填充螺旋实例
2018/01/15 Python
python导出hive数据表的schema实例代码
2018/01/22 Python
python文件转为exe文件的方法及用法详解
2019/07/08 Python
python全局变量引用与修改过程解析
2020/01/07 Python
python:HDF和CSV存储优劣对比分析
2020/06/08 Python
阿提哈德航空官方网站:Etihad Airways
2017/01/06 全球购物
博士学位自我鉴定范文
2013/12/26 职场文书
基层干部群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
会议简讯范文
2015/07/20 职场文书
曾国藩励志经典名言37句,蕴含哲理
2019/10/14 职场文书
如何利用map实现Nginx允许多个域名跨域
2021/03/31 Servers
mybatis 解决从列名到属性名的自动映射失败问题
2021/06/30 Java/Android