- Notifications
You must be signed in to change notification settings - Fork0
chinosk6/QQ-official-guild-bot
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
- 开发中~
- 参考
bot_main.py
- 在
bot_main.py
同级目录下创建名为config.yaml
的配置文件,填入自己的bot_app_id
、bot_token
及bot_secret
,内容类似下面所示,也可直接使用仓库里的config.example.yaml
文件,然后自己修改后缀名和内容
bot:id:123# 机器人idtoken:456# 机器人tokensecret:789# 机器人secret
importbot_apifrombot_api.modelsimportArk,Embedfrombot_api.utilsimportyaml_utiltoken=yaml_util.read('config.yaml')bot=bot_api.BotApp(token['bot']['id'],token['bot']['token'],token['bot']['secret'],is_sandbox=True,debug=True,api_return_pydantic=True,ignore_at_self=False,# 过滤消息正文中艾特Bot自身的内容, 默认为Falseinters=[bot_api.Intents.GUILDS,bot_api.Intents.AT_MESSAGES,bot_api.Intents.GUILD_MEMBERS])# 事件订阅@bot.receiver(bot_api.structs.Codes.SeverCode.BotGroupAtMessage)# 填入对应的参数实现处理对应事件defget_at_message(chain:bot_api.structs.Message):# 注册一个艾特消息处理器bot.logger(f"收到来自频道:{chain.guild_id} 子频道:{chain.channel_id} "f"内用户:{chain.author.username}({chain.author.id}) 的消息:{chain.content} ({chain.id})")if"你好"inchain.content:bot.api_send_message(chain.channel_id,chain.id,"hello world!")elif"test"inchain.content:bot.api_send_message(chain.channel_id,chain.id,"chieri在哟~")elif"/echo"inchain.content:reply=chain.content[chain.content.find("/echo")+len("/echo"):].strip()bot.api_send_message(chain.channel_id,chain.id,reply)elif"/embed"inchain.content:# 发送embedsend_embed=Embed("标题", ["文本1","文本2","文本3"],image_url=None)bot.api_send_message(chain.channel_id,chain.id,embed=send_embed)elif"/ark"inchain.content:# 发送ark消息, 需要Ark权限send_ark=Ark.LinkWithText("描述","提示信息", [["纯文本1"], ["纯文本2"], ["链接文本1","http://baidu.com"]])bot.api_send_message(chain.channel_id,chain.id,ark=send_ark)bot.start()# 启动bot
事件代号 | 事件描述 |
---|---|
GUILD_MEMBER_ADD | 成员加入 |
GUILD_MEMBER_UPDATE | 成员资料变更 |
GUILD_MEMBER_REMOVE | 成员被移除 |
MESSAGE_REACTION_ADD | 消息添加表情表态 |
MESSAGE_REACTION_REMOVE | 消息删除表情表态 |
FORUM_THREAD_CREATE | 用户创建主题 |
FORUM_THREAD_UPDATE | 用户更新主题 |
FORUM_THREAD_DELETE | 用户删除主题 |
FORUM_POST_CREATE | 用户创建帖子 |
FORUM_POST_DELETE | 用户删除帖子 |
FORUM_REPLY_CREATE | 用户回复评论 |
FORUM_REPLY_DELETE | 用户回复评论 |
这里以添加表情表态为例:bot.api_send_message(channel_id,msg_id='MESSAGE_REACTION_ADD',content='ok')
api_send_message
方法提供了极高的自由度。您可以按照本文档提供的方法发送消息, 也可以使用others_parameter
参数自行组合。
使用others_parameter
, 您需要按照QQ机器人文档 - 发送消息 提供的参数发送消息, 若有此SDK没有支持的消息类型, 您依旧可以自行组合参数进行发送。
下面是发送一条文本+图片消息的例子
- 一般情况下, 您可以:
bot.api_send_message(chain.channel_id,chain.id,"这是消息","http://您的图片")
- 您也可以:
bot.api_send_message(chain.channel_id,chain.id,others_parameter={"content":"这是消息","image":"https://您的图片"})
- 注意: 发送Ark消息需要向官方申请Ark权限, 否则无法发送
frombot_api.modelsimportArk,Embed
发送Embed消息
send_embed=Embed("标题", ["文本1","文本2","文本3"],image_url="http://你的图片")"image_url"参数可选,若没有图片,则不填bot.api_send_message(channel_id,message_id,embed=send_embed)
发送Ark消息
Ark
类中目前有LinkWithText
,TextAndThumbnail
,BigImage
三个子类, 分别对应23 链接+文本列表模板,24 文本+缩略图模板,37 大图模板, 下面以构造相对复杂的23 链接+文本列表模板为例
send_ark=Ark.LinkWithText("描述","提示信息", [["纯文本1"], ["纯文本2"], ["链接文本1","http://baidu.com"], ["链接文本2","http://google.com"]])bot.api_send_message(channel_id,message_id,ark=send_ark)
下表中所有事件触发时都会在新线程中执行
事件代号
: 注册函数时, 输入对应事件代号, 在触发相应事件时, 所有被注册函数将被调用。- 位于: 类
bot_api.structs.Codes.SeverCode
, 继承自GatewayEventName
- 位于: 类
传入参数
指被注册函数的参数- 位于: 类
bot_api.structs
- 位于: 类
事件代号 | 传入参数 | 事件描述 |
---|---|---|
FUNC_CALL_AFTER_BOT_LOAD | 初始化后的BotAPP类(self) | 当Bot初始化完成后, 会立刻执行这些函数 |
AT_MESSAGE_CREATE | Message | 收到艾特消息 |
MESSAGE_CREATE | Message | 收到消息(仅私域机器人可用) |
DIRECT_MESSAGE_CREATE | Message | 收到私聊消息 |
GUILD_CREATE | Guild | bot加入频道 |
GUILD_UPDATE | Guild | 频道信息更新 |
GUILD_DELETE | Guild | 频道解散/bot被移除 |
CHANNEL_CREATE | Channel | 子频道被创建 |
CHANNEL_UPDATE | Channel | 子频道信息变更 |
CHANNEL_DELETE | Channel | 子频道被删除 |
GUILD_MEMBER_ADD | MemberWithGuildID | 新用户加入频道 |
GUILD_MEMBER_UPDATE | - | TX: 暂无 |
GUILD_MEMBER_REMOVE | MemberWithGuildID | 用户离开频道 |
AUDIO_START | AudioAction | 音频开始播放 |
AUDIO_FINISH | AudioAction | 音频结束 |
AUDIO_ON_MIC | AudioAction | 上麦 |
AUDIO_OFF_MIC | AudioAction | 下麦 |
MESSAGE_REACTION_ADD | MessageReaction | 添加表情表态 |
MESSAGE_REACTION_REMOVE | MessageReaction | 删除表情表态 |
THREAD_CREATE | 暂不支持 | 用户创建主题 |
THREAD_UPDATE | 暂不支持 | 用户更新主题 |
THREAD_DELETE | 暂不支持 | 用户删除主题 |
POST_CREATE | 暂不支持 | 用户创建帖子 |
POST_DELETE | 暂不支持 | 用户删除帖子 |
REPLY_CREATE | 暂不支持 | 用户回复评论 |
REPLY_DELETE | 暂不支持 | 用户回复评论 |
MESSAGE_AUDIT_PASS | MessageAudited | 消息审核通过 |
MESSAGE_AUDIT_REJECT | MessageAudited | 消息审核不通过 |
PUBLIC_MESSAGE_DELETE | MessageDelete | 消息撤回(公域) |
MESSAGE_DELETE | MessageDelete | 消息撤回(私域) |
DIRECT_MESSAGE_DELETE | MessageDelete | 消息撤回(私聊) |
- 例: 注册一个
添加表情表态
处理函数
@bot.receiver(bot_api.structs.Codes.SeverCode.MESSAGE_REACTION_ADD)# 填入事件代号defget_at_message(event:bot_api.structs.MessageReaction):# 函数参数类型为上表对应的传入参数pass
- 初始化Bot实例后, 输入
bot.api_
, 即可根据代码补全进行使用
api_send_message()# 发送频道消息api_create_dms()# 创建私信会话api_send_private_message()# 发送私聊消息api_reply_message()# 回复消息(频道/私聊)api_mute_guild()# 全频道禁言api_mute_member()# 指定用户禁言api_get_self_guilds()# 获取Bot加入的频道列表api_get_self_info()# 获取Bot自身信息api_get_message()# 获取指定消息api_get_guild_channel_list()# 获取频道内子频道列表api_get_channel_info()# 获取子频道信息api_get_guild_user_info()# 获取频道用户信息api_get_guild_info()# 获取频道信息api_get_schedule_list()# 获取子频道日程列表api_get_schedule()# 获取单个日程信息api_schedule_create()# 创建日程api_schedule_change()# 修改日程api_schedule_delete()# 删除日程api_message_recall()# 撤回消息api_guild_roles_list_get()# 获取频道身份组列表api_guild_role_create()# 创建频道身份组api_guild_role_change()# 修改频道身份组api_guild_role_remove()# 删除频道身份组api_guild_role_member_add()# 增加频道身份组成员api_guild_role_member_remove()# 移除频道身份组成员api_announces_create()# 创建频道公告api_announces_remove()# 删除频道公告api_permissions_get_channel()# 获取指定子频道的权限api_permissions_change_channel()# 修改指定子频道的权限api_permissions_get_channel_group()# 获取指定子频道身份组的权限api_permissions_change_channel_group()# 修改指定子频道身份组的权限api_audio_control()# 音频控制api_get_api_permission()# 获取频道可用权限列表api_demand_api_permission()# 创建频道 API 接口权限授权链接api_add_pins()# 添加精华消息api_remove_pins()# 删除精华消息api_get_pins()# 获取精华消息api_send_message_reactions()# 发送表情表态api_send_message_guide()# 发送消息设置引导api_get_guild_message_freq()# 获取频道消息频率设置api_pv_get_member_list()# 仅私域机器人可用 - 取频道成员列表api_pv_kick_member()# 仅私域机器人可用 - 踢出指定成员api_pv_create_channel()# 仅私域机器人可用 - 创建子频道api_pv_change_channel()# 仅私域机器人可用 - 修改子频道信息api_pv_delete_channel()# 仅私域机器人可用 - 删除子频道
一个人同时更新两套SDK显然是非常困难的。
因此HTTP API部分的更新进度会慢于SDK本体(已停更)。欢迎有能之士前来Pr~参考
main.py
importbot_apiimportserverbot=bot_api.BotApp(123456,"你的bot token","你的bot secret",is_sandbox=True,debug=True,api_return_pydantic=True,inters=[bot_api.Intents.GUILDS,bot_api.Intents.AT_MESSAGES,bot_api.Intents.GUILD_MEMBERS])# 事件订阅app=server.BotServer(bot,ip_call="127.0.0.1",port_call=11415,ip_listen="127.0.0.1",port_listen=1988,allow_push=False)# 开始注册事件, 可以选择需要的进行注册app.reg_bot_at_message()# 艾特消息事件app.reg_guild_member_add()# 成员增加事件app.reg_guild_member_remove()# 成员减少事件# 以下事件与onebot差别较大app.reg_guild_create()# Bot加入频道事件app.reg_guild_update()# 频道信息更新事件app.reg_guild_delete()# Bot离开频道/频道被解散事件app.reg_channel_create()# 子频道创建事件app.reg_channel_update()# 子频道信息更新事件app.reg_channel_delete()# 子频道删除事件@app.bot.receiver(bot_api.structs.Codes.SeverCode.image_to_url)# 注册一个图片转url方法defimg_to_url(img_path:str):# 用处: 发送图片时, 使用图片cq码[CQ:image,file=]或[CQ:image,url=]# 装饰器作用为: 解析cq码中图片的路径(网络图片则下载到本地), 将绝对路径传给本函数, 自行操作后, 返回图片url, sdk将使用此url发送图片# 若不注册此方法, 则无法发送图片。print(img_path)return"https://你的图片url"# 注册事件结束app.listening_server_start()# HTTP API 服务器启动app.bot.start()# Bot启动
CQ码 | 功能 | 备注 |
---|---|---|
[CQ:reply,id=abc123] | 回复消息 | 被动回复请务必带上此CQ码, 否则会被视为主动推送消息 |
[CQ:at,qq=123456] | 艾特用户 | 与官方<@!123456>对应 |
[CQ:image,file=...] [CQ:image,url=...] | 发送图片 | 发送图片可以使用这两个CQ码 由于API限制, 发送图片仅支持一张, 并且需要自行配置图床(见上方代码示例) 接收到图片时, 目前仅会返回[CQ:image,url=...] |
- 特别注意: 所有
用户ID
,频道号
,子频道号
,消息ID
字段均为string
接口 | 描述 | 备注 |
---|---|---|
/send_group_msg | 发送群消息 | group_id 请填写channel_id auto_escape 为true时, 依然会解析[CQ:reply] |
/get_group_member_info | 获取成员信息 | group_id 请填写guild_id 仅 user_id ,nickname ,role 有效额外增加头像URL: avatar |
- 接口:
/get_self_info
参数 | 类型 | 默认值 | 说明 |
---|---|---|---|
cache | bool | false | 是否使用缓存(可选) |
- 返回参数
参数 | 类型 | 说明 |
---|---|---|
avatar | string | 头像url |
id | string | BotID |
username | string | Bot名 |
- 接口:
/get_self_guild_list
参数 | 类型 | 默认值 | 说明 |
---|---|---|---|
cache | bool | false | 是否使用缓存(可选) |
before | string | - | 读此id之前的数据(可选,before /after 只能二选一) |
after | string | - | 读此id之后的数据(可选,before /after 只能二选一) |
limit | int | 100 | 每次拉取多少条数据(可选) |
- 返回参数
见:https://bot.q.qq.com/wiki/develop/api/openapi/channel/get_channel.html
- 接口:
/get_guild_info
参数 | 类型 | 默认值 | 说明 |
---|---|---|---|
guild_id | string | - | 频道id |
- 返回参数
见:https://bot.q.qq.com/wiki/develop/api/openapi/guild/get_guild.html
- 接口:
/get_channel_info
参数 | 类型 | 默认值 | 说明 |
---|---|---|---|
channel_id | string | - | 子频道id |
- 返回参数
见:https://bot.q.qq.com/wiki/develop/api/openapi/channel/get_channel.html
- 接口:
/get_channel_list
参数 | 类型 | 默认值 | 说明 |
---|---|---|---|
guild_id | string | - | 频道id |
- 返回参数
见:https://bot.q.qq.com/wiki/develop/api/openapi/channel/get_channels.html
- 接口:
/get_message
参数 | 类型 | 默认值 | 说明 |
---|---|---|---|
message_id | string | - | 消息id |
channel_id | string | - | 频道id |
- 返回参数
见:https://bot.q.qq.com/wiki/develop/api/openapi/message/get_message_of_id.html
- 特别注意: 所有
用户ID
,频道号
,子频道号
,消息ID
字段均为string
见:https://github.com/botuniverse/onebot-11/blob/master/event/message.md#%E7%BE%A4%E6%B6%88%E6%81%AF
注意:
- 注意上面的
特别注意
anonymous
字段恒为null
sender
字段中仅user_id
,nickname
,role
有效
- 注意上面的
- 见:https://github.com/botuniverse/onebot-11/blob/master/event/notice.md#%E7%BE%A4%E6%88%90%E5%91%98%E5%A2%9E%E5%8A%A0
- 注意:
注意上面的
特别注意
sub_type
恒为approve
- 见:https://github.com/botuniverse/onebot-11/blob/master/event/notice.md#%E7%BE%A4%E6%88%90%E5%91%98%E5%87%8F%E5%B0%91
- 注意:
- 注意上面的
特别注意
sub_type
恒为leave
- 注意上面的
- 通用字段
参数 | 类型 | 默认值 | 说明 |
---|---|---|---|
time | int | - | 消息接收时间戳 |
self_id | string | - | 自身id |
post_type | string | notice | 上报类型 |
notice_type | string | - | 通知类型 |
sub_type | string | - | 通知子类型 |
user_id | string | 空字符串 | 触发者ID, 仅在对应事件有值 |
guild_id | string | 空字符串 | 触发频道ID, 仅在对应事件有值 |
channel_id | string | 空字符串 | 触发子频道ID, 仅在对应事件有值 |
data | - | - | 每个事件均不同, 见下方文档 |
参数 | 类型 | 值 |
---|---|---|
post_type | string | notice |
notice_type | string | guild_create |
sub_type | string | guild_create |
guild_id | string | 频道ID |
data | Guild | 见:腾讯机器人文档 |
参数 | 类型 | 值 |
---|---|---|
post_type | string | notice |
sub_type | string | guild_update |
guild_id | string | 频道ID |
data | Guild | 见:腾讯机器人文档 |
参数 | 类型 | 值 |
---|---|---|
post_type | string | notice |
notice_type | string | guild_update |
sub_type | string | guild_update |
guild_id | string | 频道ID |
data | Guild | 见:腾讯机器人文档 |
参数 | 类型 | 值 |
---|---|---|
post_type | string | notice |
notice_type | string | channel_create |
sub_type | string | channel_create |
guild_id | string | 频道ID |
channel_id | string | 子频道ID |
data | Channel | 见:腾讯机器人文档 |
参数 | 类型 | 值 |
---|---|---|
post_type | string | notice |
notice_type | string | channel_update |
sub_type | string | channel_update |
guild_id | string | 频道ID |
channel_id | string | 子频道ID |
data | Channel | 见:腾讯机器人文档 |
参数 | 类型 | 值 |
---|---|---|
post_type | string | notice |
notice_type | string | channel_delete |
sub_type | string | channel_delete |
guild_id | string | 频道ID |
channel_id | string | 子频道ID |
data | Channel | 见:腾讯机器人文档 |
About
QQ频道bot sdk
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Packages0
Uh oh!
There was an error while loading.Please reload this page.
Contributors2
Uh oh!
There was an error while loading.Please reload this page.