【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:请不要误会,我不是卖服务器的,我也没有接广告😂