【Python】教你白嫖 replit 部署 kook-ticket-bot(已失效)
教你白嫖 replit 部署 kook 的 ticket 机器人 (已失效)。
注意:2024 年 replit 策略更新,免费用户只能部署静态页面了。本文所述白嫖方案已经失效,而 replit 的付费价格高于自购云服务器价格,并不推荐。如果您还有自部署 ticket 机器人的需求,可以加入我的 kook 服务器联系我。
1. 前言
最近有不少老哥来找我咨询有关 ticket 机器人的事情,当前 ticket 机器人需要云服务器才能部署,有些不太友好(要钱啊!而且也不是人人都会安装 python 环境)
所以在这里利用 replit 和 uptimerobot 两个平台,给大家介绍一个白嫖的方法,实现部署 kook-ticket-bot
该方法理论上支持所有使用
khl.py
框架编写的机器人!
注意!replit 上的免费仓库,默认是公开的,也就是所有人都能访问到你这个仓库里面的文件,包括 bot 的 token 和日志信息!若您的 ticket-bot 对数据私密性要求较高,请自购服务器或找开发者代为部署!
2. 准备
2.1 注册账户
这两个平台国内访问缓慢,如果实在进不去,就下载一个 steam++
(又称 watt toolkit)
如图,下载 exe 就可以了
安装打开以后,把这一堆无差别勾上,点一键加速,应该就 ok 了,访问会稍微快一点
随后就是注册这两个平台的账户了,应该不需要教吧(doge)
2.2 打开 gitee/github 仓库
为了方便访问,我将 ticket-bot 在 gitee 也传了一份,大家打开仓库的 code 目录,准备拷贝代码。能使用 github 的,建议用 GitHub(因为 github 的代码更加新)
2.3 申请 kook 开发者
网页: KOOK 开发者中心
到 kook 的开发者平台,加入官方频道申请承为开发者(现在已经不需要申请了),获取创建 bot 的权限;有了权限之后,新建一个应用
随后进入机器人页面,复制这里的 token,先保存起来,后面要用(一会再来复制也行)
进入邀请页面,给予机器人管理员权限(这样是为了方便,不然得钩一大堆)
然后复制上面的邀请链接到浏览器,邀请机器人进入你的服务器
你应该能在频道里面看到欢迎信息,机器人已经加入你的频道了。
3. 开始部署
3.1 创建 repl
来到 replit,创建仓库
选择 python,然后给它取个名字
创建之后进入这个项目
import from github
会显示仓库不可用,所以只能手动操作了。
3.2 添加代码文件
进来之后是这样的页面,只有一个 main.py
,其他什么都无
点击右侧 shell
,复制后,shift+ins
粘贴如下命令,可一建拉取所有代码,并覆盖已有文件。(创建 repl 的时候一定要选择 python,否则 pip 会无法运行)
1 | git clone https://github.com/musnows/Kook-Ticket-Bot.git && mv -b Kook-Ticket-Bot/* ./ && mv -b Kook-Ticket-Bot/.[^.]* ./ && rm -rf Kook-Ticket-Bot && pip install -r requirements.txt |
如果如上命令不可用,则需要根据我仓库的代码,手动创建同名文件,并将代码复制进去:
- github 的代码更加新,如果能打开 github,请在 github 复制代码:https://github.com/musnows/Kook-Ticket-Bot
- 实在打不开,再来 gitee:https://gitee.com/musnow/Kook-Ticket-Bot/tree/main/code
有一个简便办法,就是在 github/gitee 的 clone 按钮中选择下载 zip,然后将 zip 解压后,将文件夹上传上去,并把内部文件移动道根目录。
3.3 添加配置文件
如果你直接运行了,会出现如下报错,代表没有找到 config/config.json
文件。即没有找到机器人运行必要的配置文件。
新版本的 ticket 机器人会自动创建 log 目录下的文件,但是 config 下的配置文件依旧需要您手动操作!
接下来就是根据仓库的 README 添加各类配置文件,本文不重复 README 中已有内容。
1 | config/config.json # 机器人token配置 |
先把如上的几个文件全部建立好,然后根据仓库的 README 往里面添加键值。新版本 log 目录下的文件,机器人会自动创建,可以不手动创建。 主要配置 config 即可。
3.3.1 开启 kook 开发者模式
很多操作都需要复制 ID,先在设置高级设置中开启开发者模式
3.3.2 配置 config
下面给出一个 TicketConf.json
中需要配置的几项的样例
在这里重申,添加了这两个角色 id 之后,必须要给予用户对应的角色(特别是腐竹)才能操作 bot 的命令,否则提示权限不足
配置为文件添加完毕之后,应该是下面这样的
3.4 开始运行
新版本已经采用 logging 来替换 print,不再需要手动配置 logDup
配置文件修改好后,就可以点击顶部的 run,尝试运行 bot 了,变成下面的样子那就是在运行了
3.4.1 安装包
刚开始打印如果提示这个,代表没有找到对应的包
先尝试在 shell
中输入如下命令
1 | pip install -r requirements.txt |
如果出现了如图所示的安装页面,那就一切 ok,安装好了再点击 run 就可以了
如果不行。那就在工具 tools 里面选择 packges,搜索 khl.py
如下提示,安装成功!
3.4.2 时区问题
新版本自带的
.replit
文件已经写入了这个配置
运行还会有这个警告
1 | /home/runner/tk-dev/venv/lib/python3.10/site-packages/tzlocal/unix.py:183: UserWarning: Can not find any timezone configuration, defaulting to UTC. |
点击显示隐藏文件
打开.replit
文件,在如下位置添加一行(然而这个时区配置没有用)
1 | [env] |
再次运行,就不会有这个报错了
3.4.3 运行成功
在点击运行,出现如图所示的页面,那就是运行成功了!
因为采用了 webhook 的链接,需要去后台填入 callback url
,填入后点击重试。如果没有红色字体报错,那就是成功了!
1 | replit给的url/khl-wh |
如果不成功,先尝试在浏览器中访问此 url,看看是否出现了 405 Method Not Allowed
,如果出现了,代表程序正常运行,多点击几次重试即可。这点在 README 里面也有说明
现在进 kook 里面,先测试一下我们的 bot 是否在线
测试通过!后台也打印出了日志
3.5 uptimeRobot
别急别急,虽然到这里已经 ok 了,但我们还有一个步骤要做!
进入 uptimeRobot,需要创建一个监控实例,来调用机器人的 url,保证我们的 bot 不会因为 replit 的策略(5 分钟不活跃就休眠)而下线过久。
使用 webhook 连接,也是为了让 kook 发送报文给机器人的时候,让 repl 不休眠。
理论上来说,只要你的服务器用户够多,发言活跃(每次发言,kook 都会发送一条信息给机器人,不管是不是机器人的命令)是可以不用配置 uptimerobot 的。
但是为了避免机器人在服务器不活跃的时候,无法收到 kook 的报文,而进入休眠态,还是建议大家按教程配置一下 uptimerobot 的监控
点击 add new monitor
,选择 http
按如下所示填写
- name 随便填个英文名
- url 填在 replit 复制的链接,后面加上
/khl-wh
- intervel 是单次监控的间隔,选择 5 分钟(低于 5 分钟得收费)
- timeout 默认 30s 不需要修改
- 两个 ssl 取消勾选
建议勾选上这个,在 bot 下线的时候,会向你的邮箱发送通知
配置完毕,点击右下角的 create
这时候就会开始运行了!下方的 pause
可以暂停运行。
如果你 create 完毕,发现是黑色的,那就点击一下 start
让他开始运行
3.5.1 自建 uptime-kuma
由于免费的 uptimerobot 的监控最低只能选择 5 分钟,正好和 replit 的休眠时间相同,导致即便你设置了 uptimerobot 的 ping,repl 依旧有几率休眠。
您可以选择在 replit 上面部署一个 uptime-kuma,该项目可以自定义监控时间(无限制);缺点就是 这个 repl 也需要用请求来进行保活(不确定能否自己请求自己实现保活)
replit 创建一个新的 repl,在 shell 中输入如下命令,即可一键部署。详细内容参考该项目的 README
1 | git clone https://github.com/valetzx/uptimekumaonreplit && mv -b uptimekumaonreplit/* ./ && mv -b uptimekumaonreplit/.[^.]* ./ && rm -rf *~ && rm -rf uptimekumaonreplit |
温馨提示:replit 的 repl 默认公开,若您部署了 uptime-kuma,请不要把该服务的用户名 / 密码设置成任何和您已有其他平台的用户名 / 密码相同。
建议拿张纸记录下一个随机字符串作为 uptime-kuma 的密码,避免您常用的密码泄露。
本人已经部署了该服务,若您有 repl 保活需求,可以加入我的帮助服务器,将您的 replit-url 告知我。
即:使用我部署的 uptime-kuma 来请求您的 replit-url,实现保活!
3.5.2 解决 405 错误导致的 down
在我 replit 部署机器人,使用 uptimerobot 的时候,遇到了下面的问题。我在 uptimerobot 里面填入了 replit 的 url 如下
1 | replit给的url/khl-wh |
但由于免费版本的 uptimerobot 仅支持 head 请求,而 /khl-wh
路径是只支持 post 请求的。由此便引发了这个问题
说来奇怪,我其他三个在 replit 上面用 webhook 部署的机器人并没有出现这个问题(理论上来说应该会出现才对)不管这个,有问题我们就解决问题
解决办法如下,找到 main.py
,选中 Bot
,右键 jump to definition
,转到定义
或者在左侧选择 show hidden files
,进入 venv
文件夹
这时候便展开了隐藏的包文件,路径为
1 | venv/lib/python3.10/site-packages/khl/bot/bot.py |
我们需要找的文件是
1 | venv/lib/python3.10/site-packages/khl/receiver.py |
进去之后,找到大概 180 行的位置,有一个
1 | self.app.router.add_post(self.route, on_recv) |
复制如下代码替换原有,这个代码的作用是给 /khl-wh
添加 get 请求的支持,这样 uptimerobot 的 head 请求就不会报错了。
修改的时候,一定要注意代码的缩进,要保证新的代码缩进和旧的代码缩进相同!否则可能导致意想不到的后果。
1 | async def on_root(request: web.Request): |
配置了之后,重新启动机器人,将 url 粘贴到浏览器,尝试访问
1 | replit给的url/khl-wh |
这时候显示的就不再是 405,而是 khl.py get recv!
了,表明代码修改正确!
这时候去看看 uptimerobot,它的请求就没有出错了!
完美解决!
4. 下线机器人
bot 有一个特殊的 kill 命令。执行此 kill 命令,可以刷新缓冲区。
避免出现数据在缓冲区中没有写入到文件,导致丢失日志 or 数据文件
1 | /kill @机器人 |
如果你想退出 bot,建议使用 kill 命令来操作!
大功告成!
现在你可以根据 help 去测试一下各类命令是否能正常工作啦
注意,关闭 ticket 之后可能会出现这个报错,这是因为用户从来没有给 bot 发送过信息,导致 bot 无法用户发送私信,忽略此报错即可(新版本已经取消了这个报错)
因为 replit 是免费的,所以 bot 的反应可能有些迟钝,正常情况!
建议使用 kook 网页版进行测试,如果出现机器人不响应,先刷新一下网页。有很多时候纯粹是 kook 自己的客户端抽风导致命令消息看不到。
再次提醒
再次提醒!replit 上的免费仓库,默认是公开的,也就是所有人都能访问到你这个仓库里面的文件,包括 bot 的 token 和日志信息!
- 为了规避 token 泄漏造成过大影响,建议每隔一段时间就上后台重置 token
若您的 ticket-bot 对数据私密性要求较高,请自购服务器或找开发者代为部署!
关于自购服务器相关事项,可加入帮助服务器咨询我,我可以帮助你配置服务器的 Python 基本环境
PS:请不要误会,我不是卖服务器的,我也没有接广告😂