QQ机器人的实现基于NoneBot
NoneBot是一个基于酷Q的python异步QQ机器人框架
酷Q实现了一个无头QQ客户端
所有事件(收到消息、通知等)会通过酷Q的HTTP API插件
NoneBot仅支持python3.6.1+
安装NoneBot pip install nonebot(只能在windows上运行)
在论坛找到最新的酷Q Air https://cqp.cc/b/news
下载酷Q Air图灵版
安装cool-httP-api
https://github.com/richardchien/cool-http-air/releases
下载io.github.richardchien.coolqhttpapi.cpk
放到酷Q Air的app文件夹里
注意如果酷Q启动时报错说插件加载失败,或者系统弹窗提示缺少DLL文件
请参考:https://cqhttp.cc/docs/4.12/#/
QQ机器人实现代码
运行CQA.exe(登陆最好使用小号,防止大号被封)
登录后会有一个悬浮框且在工具栏会有图标
在应用管理中开启HTTP API
配置HTTP API
在data/app/io.github.richardchien.coolqhttpapi/config/下可以看到。一个以登录QQ号命名的.json文件
打开文件找到下面三个配置,修改为
ws_reverse_api_url:‘ws://127.0.0.1:8080/ws/api/’
ws_reverse_event_url:‘ws://127.0.0.1:8080/ws/event/’
use_ws_reverse:true
编写一个主启动程序,保存为main.py文件
import nonebot
if name==‘main’:
nonebot.init()
nonebot.load_builtin_plugins()
nonebot.run(host=‘127.0.0.1’,port=8080)
运行该文件并启动酷Q机器人,python确定已启动
用另一个账号给机器账号发一条指令:/echo 你好,时间 机器人会回一段相同的话:你好,世界
新建一个config.py文件,放在和main.py同一个位置
from nonebot.default_cOnfig import *
SUPERUSERS={123123123} #括号里填账号
创建一个MyBot文件夹,在里面创建一个plugins文件夹,在里面创建一个bot.py文件
修改main.py文件
import nonebot
import config
from os import path
if ‘name’==‘main’:
nonebot.init(config)
nonebot.load_plugins(
path.join(path.dirname(file),‘MyBot’,‘plugins’)
‘MyBot.plugins’
)
nonebot.run(host=‘127.0.0.1’,port=8080)
找到plugins文件夹里的bot.py文件,加入以下内容
import nonebot
bot=nonebot.get_bot()
@bot.on_message(‘private’) #收到私聊消息后
async def_(ctx):
print(ctx)
@bot.on_message(‘group’) #收到群聊消息后
async def_(ctx):
print(ctx)
处理加群信息
from nonebot import on_request,RequestSession
#将函数注册为群请求处理器
@on_request(‘group’)
async def_(session:RequestSession):
#验证消息是否符合要求
if session.ctx[‘comment’]==‘暗号’:
#验证消息正确,同意入群
await session.approve()
return
#验证消息错误,拒绝入群
await session.reject(‘请说暗号’)
接受新人入群消息
from nonebot import on_notice,NoticeSession
#将函数注册为群成员增加处理器
@on_notice(‘group_increase’)
async def_(session:NoticeSession):
print(‘有新人来了’)
发送私聊消息
@bot.on_message(‘private’)
async def_(ctx):
msg=ctx[‘raw_message’]
user_id=ctx[‘user_id’]
await bot.send_private_msg(user_id=userQQ,message=msg)
#bot.send_private_msg(user_id=对方rQQ,message=具体消息)
发送群聊消息
@bot.on_message(‘group’)
async def_(ctx):
user_id=ctx[‘user_id’]
if user_id==233333
group_id=cxt[‘group_id’]
await bot.send_group_msg(group_id=groupQQ,message=‘WHO’)
#bot.send_group_msg(group_id=群号,message=具体消息)
欢迎新成员(对于有session的,可以直接session.send())
@on_notice(‘group_increase’)
async def_(session:NoticeSession):
await session.send(‘Welcome’)
发布群公告
bot._send_group_notice(group_id=群号,title=群公告标题,content=群公告内容)
群组设置禁言
@bot.on_message(‘group’)
async def_(ctx):
msg=ctx[‘raw_message’]
if ‘xxx’ in msg:
group_id=ctx[‘group_id’]
user_id=ctx[‘user_id’]
await bot.set_group_ban(group_id=groupQQ,user_id=userQQ,duration=15*60)
#bot.set_group_ban(group_id=群号,user_id=QQ号,duration=以秒为单位的禁言时间)
群组踢人
bot.set_group_kick(group_id=groupQQ,user_id=userQQ,reject_add_request=True)
#bot.set_group_kick(group_id=群号,user_id=要踢的QQ号)
#reject_add_request=是否不允许再加群
学习链接:https://www.bilibili.com/video/BV197411f7Rp