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 命令行也可以自动补全
Nov 30 Python
简单介绍利用TK在Python下进行GUI编程的教程
Apr 13 Python
python subprocess 杀掉全部派生的子进程方法
Jan 16 Python
Python实现Youku视频批量下载功能
Mar 14 Python
Python实现破解12306图片验证码的方法分析
Dec 29 Python
Tornado 多进程实现分析详解
Jan 12 Python
python安装模块如何通过setup.py安装(超简单)
May 05 Python
Python中偏函数用法示例
Jun 07 Python
详解python实现小波变换的一个简单例子
Jul 18 Python
Python学习笔记之列表推导式实例分析
Aug 13 Python
Python数据库小程序源代码
Sep 15 Python
Python完全识别验证码自动登录实例详解
Nov 24 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源码之 ext/mysql扩展部分
2009/07/17 PHP
理解PHP中的stdClass类
2014/04/18 PHP
yii实现使用CUploadedFile上传文件的方法
2015/12/28 PHP
php中目录操作opendir()、readdir()及scandir()用法示例
2019/06/08 PHP
PHP pthreads v3下worker和pool的使用方法示例
2020/02/21 PHP
CL vs ForZe BO5 第三场 2.13
2021/03/10 DOTA
代码生成器 document.write()
2007/04/15 Javascript
JavaScript脚本性能优化注意事项
2008/11/18 Javascript
jQuery 工具函数学习资料
2010/04/29 Javascript
Jquery实现搜索框提示功能示例代码
2013/08/13 Javascript
js setTimeout()函数介绍及应用以倒计时为例
2013/12/12 Javascript
推荐9款炫酷的基于jquery的页面特效
2014/12/07 Javascript
JavaScript中的方法调用详细介绍
2014/12/30 Javascript
CSS图片响应式 垂直水平居中
2015/08/14 Javascript
D3.js进阶系列之CSV表格文件的读取详解
2017/06/06 Javascript
Vue.js组件使用props传递数据的方法
2019/10/19 Javascript
vue设置动态请求地址的例子
2019/11/01 Javascript
element中Steps步骤条和Tabs标签页关联的解决
2020/12/08 Javascript
Python实现的下载8000首儿歌的代码分享
2014/11/21 Python
Python中实现常量(Const)功能
2015/01/28 Python
Python使用BeautifulSoup库解析HTML基本使用教程
2016/03/31 Python
python3实现跳一跳点击跳跃
2018/01/08 Python
pycharm创建一个python包方法图解
2019/04/10 Python
在python tkinter中Canvas实现进度条显示的方法
2019/06/14 Python
详解使用django-mama-cas快速搭建CAS服务的实现
2019/10/30 Python
python中导入 train_test_split提示错误的解决
2020/06/19 Python
如何以Winsows Service方式运行JupyterLab
2020/08/30 Python
Python中使用Selenium环境安装的方法步骤
2021/02/22 Python
HTML5梦幻之旅——炫丽的流星雨效果实现过程
2013/08/06 HTML / CSS
澳大利亚UGG工厂直销:Australian Ugg Boots
2017/10/14 全球购物
英国伦敦的睡衣品牌:Asceno
2019/10/06 全球购物
《大禹治水》教学反思
2014/04/27 职场文书
财务部副经理岗位职责范本
2014/06/17 职场文书
大学活动总结模板
2014/07/10 职场文书
2014年秘书工作总结
2014/11/25 职场文书
一年级语文上册复习计划
2015/01/17 职场文书