A ticket bot for KOOK,
当用 户B点 击卡片 消息 的 按钮后 ,创建一 个只有用 户B可 见的文字 频道- Bot
会 自 动在该临时频道 发送一 条 消息 ,并@
用 户B和 处理表 单的@
管理 员 当 处理完 毕后,点 击关闭
按钮,Bot会 删除该文字 频道文字 频道删除后 ,Bot会 给预先 设置
好 的 log频道和 开启ticket
发送一条记录信息,并在的 用 户服 务器后 端 保存 该ticket的 聊天记录;管理 员可以使用 /tkcm
命令 ,指定 ticket编号对该工 单发表 评论
通 过表情 回 应给用 户添加 对应角 色 - 设置Bot动态
游 戏/音 乐
无须
服 务器和 环境搭建,在 replit上部 署 本 bot!WIKI教程 。由 于replit策略 变动,此教程 内容 已 失效 。
如果您对
Bot/tkhelp
。
3.9
,
pip3 install -r reqiurements.txt
python3 main.py
如果
nohup python3 -u main.py >> ./log/bot.log 2>&1 &
musnows/kook-ticket-bot
。
docker pull musnows/kook-ticket-bot:latest
config.json
TicketConf.json
,并将该目录映/app/config
docker run -it -d \
-v 本地 配置 文 件 路 径 :/app/config \
--name=kook-ticket-bot \
musnows/kook-ticket-bot:latest
如果您需
docker run -it -d \
-v 本地 配置 文 件 路 径 :/app/config \
-p 40000:40000 \
--name=kook-ticket-bot \
musnows/kook-ticket-bot:latest
如果您在创建dockerdocker logs
aiohttp.client_exceptions.ClientConnectorError: Cannot connect to host www.kookapp.cn:443 ssl:default [Name or service not known]
CRITICAL:main.py:loading_channel:763 | [BOT.START] 获取频道失 败,请检查TicketConf文 件 中 的 debug_channel和 log_channel
一般这种情况都是DNS
docker run -it -d \
-v 本地 配置 文 件 路 径 :/app/config \
-p 40000:40000 \
--dns 180.184.1.1 \
--name=kook-ticket-bot \
musnows/kook-ticket-bot:latest
docker ps
检查/tkhelp
帮助
docker logs kook-ticket-bot
fetch_public_channel success
为机
[24-07-20 19:28:16] INFO:main.py:<module>:771 | [BOT] Start at 24-07-20 19:28:16
[24-07-20 19:28:16] INFO:main.py:loading_channel:758 | [BOT.START] fetch_public_channel success
create_log_file()
./config
config.json
,并在
{
"token":"bot webhook token",
"verify_token":"bot webhook verify token",
"encrypt":"bot webhook encrypt token",
"ws": true
}
- 如果你的
机 器 人 部署 在 无法外 网访问(无公网ip)的 机 器 上 ,请采用 websocket链接方式 ; - 如果你的
机 器 人 在 云 服 务器上部 署 ,可 以采用 webhook或 websocket方式 ;
config.json
"ws"
false
。
修 改 本地 配置 后 ,记得在 kook机 器 人 管理 后 台 修 改 机 器 人的 链接配置 ;- webhook
需要 正 确填写 "verify_token"
和 "encrypt"
配置 项
如果
# 默 认情况下(记得开放服 务器对应端 口 的 防火 墙)
# 在 main.py的 开头,有 机 器 人的 初 始 化 ,内部 有 个port参 数 为端口
http://公 网ip:40000/khl-wh
Callback Url
按钮,测试webhook
,且没
如果
如果浏览器 显示
405 method not allowed
那 么代表 你的url是 没 有 问题的 ,可 以正常 在外 网访问
如果浏览
./config
TicketConf.json
,并填
请
各 类id获取办法:kook设置-
;高 级设置 -打 开开发者模 式 右 键服务器头像,复制服 务器id;右 键用户头像 即 可 复制用 户id,右 键频道 /分 组即可 复制频道/分 组id。
ticket@
admin_role
@
关闭ticket/给ticket
。
"channel_id"
admin_role
举例:摸鱼
摸鱼
摸鱼
"admin_role"
摸鱼
TicketConf.json
{
"guild_id":"ticket bot 所 服 务的服 务器id",
"ticket": {
"admin_role": [
"114514"
],
"category_id": "隐藏掉的频道分 组id",
"channel_id": {},
"log_channel": "用 于发送ticket日 志 的 文字 频道id",
"debug_channel": "用 于发送bot出 错信息 的 文字 频道id"
}
}
这样摸鱼
/ticket
注意 :使用 /aar
命令 设置的 单频道 管理 员无法 执行ticket命令
- 频道A
和 B都 有 ticket按钮 在 频道A执行/aar @
角 色 甲 的 命令 ,会 将 角 色 甲 添加 入 频道A ticket的 管理 员中- 此时
用 户点击频道 A的 ticket按钮,机 器 人 会 @全局 管理 员 (配置 文 件 TicketConf["ticket"]["admin_role"]
中 的 管理 员)和 @角 色 甲 点 击B的 ticket按钮,只 会 @全局 管理 员- 如果
想 添加 全局 管理 员,命令 为/aar @
角 色 乙 -g
如果"admin_role"
master_id
TicketConf
"outdate":48
新 版本 Log文 件 机 器 人 会 自 动创建 ,以下 的 配置 项只为留档参考 ,理 论上无须手 动创建 文 件 。
code/log
TicketLog.json
,并填
{
"TKnum": 0,
"data": {},
"msg_pair": {},
"TKchannel": {},
"user_pair":{}
}
- TKnum
是 ticket的 编号计数,最高 为8位 数字 ,应该完全 够用了 - TKchannel
是 用 于记录bot创建的 ticket频道id,和 ticket编号对应 - msg_pair
是 一 个键值对,用 于记录bot在 ticket频道发送的 消息 (关闭按钮),和 ticket编号对应 - data
中 是 每 一 个编号 的 ticket的 详细信 息 ,包括 开启时间、开启用 户、关闭时间、关闭用 户、管理 员的评论等
code/log
TicketMsgLog.json
,并填
{
"TKMsgChannel": {},
"data": {}
}
- TKMsgChannel
是 用 于记录bot创建的 ticket频道id,和 ticket编号对应,用 来 判断 ticket频道是 否 有 过消息 (避免出 现没有 发过消息 就关闭ticket频道的 情 况) - data为消
息 记录,作 为ticket频道的 消息 记录
为了code/log/ticket
botcode/log/ticket/编号.json
TicketMsgLog.json
data
并在该频
ticketTicketConf.json
/tkcm
/tkcm TICKET编号 备注内容
示 例
/tkcm 00000000 这是一 个测试
这个
如果你不
需要 这个功 能 ,请将TicketConf.json
中 的 "emoji"
字 段 删除,这样可 以节省 机 器 人的 性能
请确认您无权
code/log/ColorID.json
{
"data":{}
}
并在 code/TicketConf.json
"emoji": {
"消息 id": {
"channel_id": "该消息 的 频道id",
"data": {},
"msg_id": "消息 id"
}
}
data
角 色 ID获取:设置内 开启开发者 模 式 后 ,进入服 务器后 台 ,右 键角色 复制id;
表情 ID获取:
在 客 户端内 ,选中表情 后 ctrl+c
,即 可 复制出 表情 id在 bot的 代 码中,打 印 add_reaction的 event消息 获取表情 id
"emoji": {
"消息 id": {
"data": {
"❤": "对应的 角 色 id-1",
"🐷": "对应的 角 色 id-2",
"💙": "对应的 角 色 id-3",
"👍": "0(对应的 是 全体 成 员的角 色 )",
},
"msg_id": "消息 id"
}
}
如果你有
"emoji": {
"消息 id A": {
"data": {
"❤": "对应的 角 色 id-1",
"🐷": "对应的 角 色 id-2",
"💙": "对应的 角 色 id-3",
"👍": "0(对应的 是 全体 成 员的角 色 )",
},
"msg_id": "消息 id A"
},
"消息 id B": {
"data": {},
"msg_id": "消息 id B"
}
}
如下,您
emoji:
对照
这两个
import requests
url = "https://www.kookapp.cn/api/v3/game/create"
botoken = "机 器 人 websocket token"
header={f'Authorization': f"Bot {botoken}"}
params ={
"name":"游 戏名",
"icon":"游 戏图标的url (可 以将图片上 传到kook后 ,点 开大图,在 右 下角 ...处复制 url)"
}
ret = requests.post(url,headers=header,data=params)
print(ret)
print(ret.text) # 返 回 值中有 游 戏的id
12345
,gaming
if game == 10: # 自己 设定一个执行命令时需要的编号
ret = await status_active_game(12345) # xxx游 戏的id
await msg.reply(f"{ret['message']},Bot上 号 xxx游 戏啦!")
kook
issue
,
如果你觉