(Translated by https://www.hiragana.jp/)
GitHub - musnows/Kook-Ticket-Bot: A Ticket Bot for KOOK (khl.py) 表单机器人,不会写代码也能自主化部署
Skip to content

A Ticket Bot for KOOK (khl.py) おもて单机じんかいうつしだい码也のう自主じしゅ部署ぶしょ

License

Notifications You must be signed in to change notification settings

musnows/Kook-Ticket-Bot

Repository files navigation

Kook-Ticket-Bot

1.说明

commit release khl server

A ticket bot for KOOK, たくかんおもて单/こう单系统机じん

工作こうさくりゅうほど

  • 当用とうよう户Bてん击卡へん消息しょうそくてき按钮きさき,创建いち个只有用ゆうよう户B见的文字もじ频道
  • Botかい动在该临时频どう发送いちじょう消息しょうそく,并@よう户B かず处理ひょう单的 @管理かんり
  • とう处理かん毕后,てん关闭按钮,Botかい删除该文字もじ频道
  • 文字もじ频道删除きさき,Botかい给预さき设置このみてきlog频道开启ticketてきよう发送一条记录信息,并在ふく务器きさきはし保存ほぞん该ticketてき聊天记录;
  • 管理かんり员可以使用しよう/tkcm命令めいれい指定していticket编号对该こう单发ひょう评论

附加ふかこうのう

  • つう表情ひょうじょうかい应给よう添加てんか对应かくしょく
  • 设置Bot动态 ゆう戏/おと

ほんREADMEつきりょう详细,そう让没ゆううつし过pythonだい码,ただし了解りょうかい基本きほん编程环境搭建てきよう户能配置はいち成功せいこう并正つね使用しようbot!

无须ふく务器环境搭建,ざいreplit上部じょうぶしょほんbot!WIKI教程きょうていよし于replit策略さくりゃく变动,此教ほど内容ないようやめ失效しっこう

如果您对ほんREADME还有かんぜんてきけん议,十分じゅうぶん欢迎您加入かにゅうKOOK帮助频道あずかわが联系,またあるものざい仓库提出ていしゅつissue。

2.帮助命令めいれい

Botてき帮助命令めいれい/tkhelp

helpCmd

主要しゅよう配置はいち项均ざい配置はいちぶんけんちゅうきさきぶんゆうひさげ及。

3.あんそう运行

3.1 Python 运行

使用しようほんつくえじんまえ,请先确认您的python版本はんぽんだか3.9, あんそう以下いか赖项

pip3 install -r reqiurements.txt

完成かんせい下方かほうてき配置はいちきさき,就可以运ぎょうbotりょう

python3 main.py

如果linuxけい统需ようbotきさきだい运行,使用しよう如下命令めいれい

nohup python3 -u main.py >> ./log/bot.log 2>&1 &

3.2 Docker 运行

提供ていきょうりょういち个docker容器ようききょうふとしじゅく悉Linux命令めいれいぎょうてきよう使用しよう,镜像名字みょうじmusnows/kook-ticket-bot

docker pull musnows/kook-ticket-bot:latest

ざい使用しよう镜像创建容器ようきまえ,您需よう参考さんこうきさきぶんてき教程きょうていざい本地ほんじじゅん备一个存放配置文件的目录(包括ほうかつconfig.jsonTicketConf.json,并将该目录映いた容器ようきないてき/app/configなか

しめせれい运行命令めいれい如下

docker run -it -d \
  -v 本地ほんじ配置はいちぶんけんみち:/app/config \
  --name=kook-ticket-bot \
  musnows/kook-ticket-bot:latest

如果您需よう使用しようWebhookてき方式ほうしき对接つくえじんいたkook,则还需要じゅよう暴露ばくろ容器ようき内的ないてき40000はしこう。另外,您还需要じゅよう开启宿主しゅくしゅつくえふく务器じょう该端こうてき防火ぼうか墙,以保证外网可以正つね连接这个はしこう

docker run -it -d \
  -v 本地ほんじ配置はいちぶんけんみち:/app/config \
  -p 40000:40000 \
  --name=kook-ticket-bot \
  musnows/kook-ticket-bot:latest

如果您在创建docker容器ようききさき容器ようき无法运行,且docker logs 容器ようきIDてき报错如下しょしめせ,这代表だいひょう容器ようきないてきpythonぼつゆう办法どおり过DNS获取いたkookふく务器てきIP

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_channellog_channel

一般这种情况都是DNSてき配置はいち问题,以在runてき时候じょう如下命令めいれい设置DNS为字节跳动的公共こうきょう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

使用しようrun启动容器ようききさき,请使用しようdocker ps检查つくえ人的じんてき容器ようき正常せいじょう运行,并使用しよう如下命令めいれい查看こころざし判断はんだんつくえじん正常せいじょう启动。如果つくえ人的じんてき容器ようきぼつゆう终止,且日こころざしぼつゆう报错,就可以去kook频道ちゅう尝试使用しよう/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

4.Config 配置はいち项(必看)

いん为bot开机てき时候就会开下めんてきぶんけんわかかけしょうだんかいかげ响botてき正常せいじょう运行;

目前もくぜんざい utils/file.py てき底部ていぶ开了所有しょゆうてき配置はいちぶんけん,并添加てんかりょう create_log_file() 函数かんすう动创けん存在そんざいてきすうすえぶんけん

以下いかREADMEちゅう配置はいちぶんけんてきしめせれい仅供参考さんこうわか运行きさき现了动创けんぶんけんしつ败的报错,请采ようREAMDEちゅうてき描述しゅ动创けん配置はいちぶんけん

4.1 つくえじん token 配置はいち

ざい ./config みちみちちゅう添加てんかconfig.json,并在さとめんはまいれconfig-exp.jsonてき内容ないようはつはじめ你的Bot。这些しんいき请在kookてき开发しゃきさきだい-应用ちゅう获取。

{
    "token":"bot webhook token",
    "verify_token":"bot webhook verify token",
    "encrypt":"bot webhook encrypt token",
    "ws": true
}

使用しようwebhook方式ほうしきかい开启いち个回调地,该操作そうさ需要じゅようゆうおおやけ网ipてきつくえ才能さいのう进行

  • 如果你的つくえじん部署ぶしょざい无法がい网访问(无公网ip)てきつくえじょう,请采ようwebsocket链接方式ほうしき
  • 如果你的つくえじんざいうんふく务器上部じょうぶしょ以采ようwebhookあるwebsocket方式ほうしき

配置はいちぶんけんconfig.jsonなかてき"ws"だん为websocket/webhookてき选项,如果使用しようwebhook,请将该配置はいち项改为 false

  • おさむあらため本地ほんじ配置はいちきさき,记得ざいkookつくえじん管理かんりきさきだいおさむあらためつくえ人的じんてき链接配置はいち
  • webhook需要じゅようせい确填うつし"verify_token""encrypt"配置はいち

如果さいようwebhookてき连接方式ほうしき需要じゅようざいkookつくえじんきさきだいはまうつしかい调地(Callback Url)

# だま认情况下(记得开放ふく务器对应はしこうてき防火ぼうか墙)
# ざいmain.pyてき开头,ゆうつくえ人的じんてきはつはじめ内部ないぶゆう个portさんすう为端こう
http://おおやけ网ip:40000/khl-wh 

はまうつし Callback Url これきさきてんじゅう按钮,测试webhook正常せいじょう。如果みぎ下角したすみ显示配置はいち成功せいこう,且没ゆう红色字体じたいてき报错,就是okりょう

如果次点じてん击重试后,きゅうしつ败,请先尝试はたurlねば贴至浏览のう正常せいじょう访问。

如果浏览显示
405 method not allowed
代表だいひょう你的urlぼつゆう问题てき以正つね在外ざいがい网访问

如果浏览显示正常せいじょうただしkook配置はいち还是くだり,请加入かにゅうKOOK帮助频道咨询!

4.2 TicketConfig こう配置はいち

ざい ./config みちみち中新ちゅうしんぞうTicketConf.json,并填いれ TicketConf-exp なかてき内容ないよう(也可以直接ちょくせつ拷贝いち份expぶんけん并重命名めいめい

注意ちゅうい配置はいちぶんけんさとめんてき键值不能ふのうおさむあらため

かく类id获取办法:kook设置-こう级设おけ-开开发者しきみぎ键服务器头像,复制ふく务器id;みぎ键用户头ぞうそく复制よう户id,みぎ键频どう/ぶん组即复制频道/ぶん组id。

kook开启开发者模式

ticketつくえじん需要じゅよう您创けんいち全体ぜんたいなり不可ふかてき隐藏ぶん组,设置该分组权げん@全体ぜんたいなり员->ぶん不可ふからい隐藏;并给管理かんり员角しょく设置权限,让管理かんり员能いた这个ぶん组。

设置隐藏分组

admin_roleなかてき管理かんり员角しょくそく为机じん发送てきticket消息しょうそくちゅうかい@てきかくしょく组;且只ゆう拥有管理かんり员身份组てきよう户,才能さいのう关闭ticket/给ticketうつし评论

bot发送附带关闭按钮的卡片

"channel_id" だんつくえじん自己じこかいはまうつし需要じゅよう自己じこはま

关于命令めいれい权限问题

ただゆう拥有admin_role中角なかずみしょくてきよう才能さいのう操作そうさbotてき管理かんり命令めいれい

举例:ふく务器ゆう摸鱼かくしょく,如果你想让张三操作そうさbotてき管理かんり命令めいれい就需よう张三添加てんかじょう摸鱼かくしょく,并进いれふく务器てき设置-かくしょく管理かんり-みぎ摸鱼かくしょく,复制かくしょくid,并把这个id添加てんかいた"admin_role"なか

角色id获取

かり摸鱼てきかくしょくid为114514,添加てんかりょうきさきてき 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命令めいれい

目前もくぜんつくえじんしんぞうりょう单频どう管理かんり配置はいちみなもと于不どう频道てきticket按钮,通知つうち不同ふどうてき管理かんり员用户

  • 频道ABみやこゆうticket按钮
  • ざい频道A执行 /aar @かくしょくかぶと てき命令めいれいかいはたかくしょくかぶと添加てんかにゅう频道A ticketてき管理かんり员中
  • 此时よう户点击频どうAてきticket按钮,つくえじんかい @全局ぜんきょく管理かんり员 (配置はいちぶんけんTicketConf["ticket"]["admin_role"]なかてき管理かんり员) かず @かくしょくかぶと
  • てん击Bてきticket按钮,ただかい @全局ぜんきょく管理かんり
  • 如果そう添加てんか全局ぜんきょく管理かんり命令めいれい/aar @かくしょくおつ -g

如果そうよう全局ぜんきょく管理かんり员,配置はいちぶんけんちゅう"admin_role"以留そら。此时ただゆう master_id よう户可以执ぎょうつくえじん管理かんり命令めいれい添加てんか单频どう管理かんり员。

こう单超时

TicketConfなかてき如下だんこう单超时时间,とう一个工单频道超过配置的时间(单位:しょう时)ぼつゆう发送过消いき,就会はた该工单频どう锁定よう户无ほう发送消息しょうそくただしきゅういたこう单频どう管理かんり员不受影响)

"outdate":48

目前もくぜん实现りょうしゅ动锁ていこう单,和重かずえしんげきかつこう单的こうのう

4.3 TicketLog

しん版本はんぽんLogぶんけんつくえじんかい动创けん以下いかてき配置はいち项只为留档参考さんこう论上无须しゅ动创けんぶんけん

ざい code/log みちみち中新ちゅうしんぞう TicketLog.json,并填いれ以下いかだん

{
    "TKnum": 0,
    "data": {},
    "msg_pair": {},
    "TKchannel": {},
    "user_pair":{}
}
  • TKnumticketてき编号计数,最高さいこう为8数字すうじ,应该完全かんぜん够用りょう
  • TKchannelよう于记录bot创建てきticket频道id,かずticket编号对应
  • msg_pairいち个键值对,よう于记录botざいticket频道发送てき消息しょうそく(关闭按钮),かずticket编号对应
  • dataちゅうごといち个编ごうてきticketてき详细しんいき包括ほうかつ开启时间、开启よう户、关闭时间、关闭よう户、管理かんり员的评论とう

4.4 TicketMsgLog

ざい code/log みちみち中新ちゅうしんぞう TicketMsgLog.json,并填いれ以下いかだん

{
  "TKMsgChannel": {},
  "data": {}
}
  • TKMsgChannelよう于记录bot创建てきticket频道id,かずticket编号对应,ようらい判断はんだんticket频道いやゆう过消いき(避免现没ゆう发过消息しょうそく就关闭ticket频道てきじょう况)
  • data为消いき记录,さく为ticket频道てき消息しょうそく记录

为了保存ほぞん聊天记录,还需よう创建 code/log/ticket ぶんけん夹(つくえじんかい动创けん

botかいざいticket关闭きさき,按照编号,保存ほぞん code/log/ticket/编号.json ぶんけん,并删じょ TicketMsgLog.json なか data だんさとめんてき内容ないよう


下面かめんticketこうのうてきしめせれい

よう户先てん击按钮,つくえじんかい创建いち个临时频どう

ticket发起

并在该频どう内部ないぶ发送いちじょう消息しょうそく,并atよう户和管理かんり员,带一个只有管理员才能关闭的按钮

bot发送附带关闭按钮的卡片

ticket关闭きさき,botかいむこうTicketConf.jsonちゅう设置てきlog频道发送いち张卡へん

bot发送log卡片

管理かんり员用户可以使用しよう/tkcm命令めいれい,给某个ticket添加てんか备注しんいき,卡片消息しょうそく会同かいどう更新こうしん

/tkcm TICKET编号 备注内容ないよう
しめせれい
/tkcm 00000000 这是いち个测试

tkcm


4.5 emoji/role 上角うえすみしょくこうのう

这个こうのうてき作用さようすえ一条消息的表情回应,给用户上对应てきかくしょく。类似于YYさとてきじょう马甲。

如果你不需要じゅよう这个こうのう,请将TicketConf.jsonなかてき"emoji"だん删除,这样以节しょうつくえ人的じんてき性能せいのう

请确认您てきbotかくしょく拥有管理かんり员权げん,并处于其需要じゅよう给予てきかくしょくうえ。如图,TestBotただのう给其他用たよう户上ざい下面かめんてきかくしょくいや则Apiかい报错 无权げん

emoji_role_rules

ようそう使用しようほんこうのう,请创けん code/log/ColorID.jsonぶんけん,复制如下内容ないよういた其中(しん版本はんぽんきさきつくえじんかい动创けん此文けん

{
    "data":{}   
}

并在 code/TicketConf.json さとめん追加ついか如下だん

  "emoji": {
    "消息しょうそくid": {
      "channel_id": "该消いきてき频道id",
      "data": {},
      "msg_id": "消息しょうそくid"
    }
  }

ずいきさきよう做的ざいdataさとめん添加てんかemojiかくしょくidてき对照ひょう

かくしょくID获取:设置ない开启开发しゃしききさき,进入ふく务器きさきだいみぎ键角しょく复制id;

表情ひょうじょうID获取:

  • ざいきゃく户端ない,选中表情ひょうじょうきさきctrl+cそく复制表情ひょうじょうid
  • ざいbotてきだい码中,しるしadd_reactionてきevent消息しょうそく获取表情ひょうじょうid

复制表情id

配置はいちしめせれい如下,ひだり侧为表情ひょうじょうみぎ侧为这个表情ひょうじょう对应てきかくしょく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"
    }
  }

如下,您需要じゅようくだり编写一个对应的角色关系消息,しかきさきみぎ键复せい该消いきてき消息しょうそくid。 卡片消息しょうそく以用かんかたてき 卡片编辑 编辑きさき发送

上角色的消息

配置はいちきさき,botかいすえ配置はいちぶんけんちゅうてきemoji:かくしょく对照ひょう,给用户上对应てきかくしょく

bot上角色

4.6 gaming/singing つくえじんざい玩状态

这两个命令めいれいよう于控せいつくえじんざい玩状态的。其中つくえ人的じんてきゆう戏状态已经写りょう几个ゆう戏。

使用しよう如下だい码,你可以创けん一个你自己想要的游戏

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

ざいさいきさきてき输出结果ちゅうかい包含ほうがんゆう戏的id。关于此apiだんてきかい释见かんかたぶん

かり设新ぞうてきゆう戏id为12345么就需要じゅようざいgaming所在しょざい函数かんすうちゅう添加てんか如下だい

  if game == 10: # 自己じこ设定一个执行命令时需要的编号
      ret = await status_active_game(12345) # xxxゆう戏的id
      await msg.reply(f"{ret['message']},Botうえごうxxxゆう戏啦!")

kookてきざい玩状态同及其缓慢,请耐しんとうまち

The end

ゆうにんなん问题,请添加てんかissueある加入かにゅうてき交流こうりゅうふく务器あずかわが联系 kook邀请链接

如果你觉得本とくもと项目还不错,还请だか抬贵しゅてん个star✨,万般ばんぱんかん谢!

About

A Ticket Bot for KOOK (khl.py) おもて单机じんかいうつしだい码也のう自主じしゅ部署ぶしょ

Topics

Resources

License

Stars

Watchers

Forks