Open Vindaugar opened 1 year ago
(通知邮件进了垃圾箱,才看到,抱歉)
感谢总结!
踩坑1 这是在国内网络环境基于 Node.js 开发的通病了,你看市面上有很多 NPM 镜像工具,比如阿里有一款,目的就是解决这一问题
这里也说下我的打包和发布流程
npm run build
打包,会生成名为 dist
的目录dist
提交到 GitHub,比如本项目的 dist
分支就是干这个用的。另外项目根目录 publish.js
就是自动化这一流程dist
目录所在 Git 仓库services:
fly-dbh-discord-bot:
image: diablohu/fly-dbh-discord-bot
ports:
- 9001:8080
extra_hosts:
- "host.docker.internal:host-gateway"
environment:
DISCORD_TOKEN_FILE: /run/secrets/discord_token
KOOK_BOT_API_BASE: http://host.docker.internal:9000
secrets:
- discord_token
volumes:
- /docker-mount/fly-dbh-discord-bot/logs:/.logs
另外,我的服务器上还有名为 shepherd
的服务,它可以自动监控 DockerHub 的镜像更新,然后自动拉取、重启 Docker 镜像。
如此一来,在执行打包后,剩下的提交、发布、更新镜像、拉取镜像等流程都是全自动的。
多谢指正!
远程监控和同步dist至Docker的方法我还真的是第一次见,学习到了!我准备用你的方法再配置一遍试试,感觉这个方法更方便维护~
昨天在自己的服务器上把两个Bot都跑起来了,总结一下我配置Discord Bot时的流程。非科班程序员出身,如果有写得不严谨、不标准或者不到位的地方还请批评指正。
因为我是先配置的Discord Bot,所以在Kook Bot配置完成前,我注释掉了Discord Bot里发送数据的代码,转为在终端打印是否成功的字符串。所以建议在配置这个Bot前先配置好配套的Kook Bot。
流程
Bot > Privileged Gateway Intents
下的三个选项,关闭Bot > Authorization Flow
下的两个选项。TOKEN
,如果忘记就只能重置。Application_ID
和Permission_Number
两个参数:https://discord.com/api/oauth2/authorize?client_id=Application_ID&permissions=Permission_Number &scope=bot%20applications.commands
,让Bot加入自己的服务器。其中Application_ID
是你创建的Application的ID,其配置页面地址里的那串数字就是;Permission_Number
是一个数字组合,代表该Bot需要获取的服务器权限,可在Bot > Bot Permissions
下部找到,配置好后复制数字即可(或者直接写8
,即赋予管理员权限)。npm install
后,进行如下修改:用自己的频道ID(不是服务器ID)替换掉src/main.ts
中第18~33行里的各串频道ID(点进你想让Bot监听的Discord频道,地址从右往左第一串数字是频道ID,第二串数字为服务器ID)。.env
文件,内容如下:npm run start
进行编译和测试运行,测试时可以在监听的频道里随便发点内容,能被Bot获取到并转发给Kook Bot即可。成功后按ctrl/control + C
结束程序运行。.env
文件拷贝进dist
目录,然后使用docker build -t 镜像名
命令进行编译。docker run -d 镜像名
即可在服务器运行此程序。踩坑
npm install
时,如果中间因为Socket问题安装失败,只需要多次重复npm install
,总会把所有的库都安装上。但是每失败一次,就会有一个库安装不完整,后面运行程序时,哪个库出问题,就去node_module
里删掉那个库的目录,然后单独重新安装。剧透:安装discord.js很可能遇到这个问题。docker build
前如果不把.env
拷贝进dist
,在最后运行时可能会报InvalidToken
错误。(我感觉自己用的是倒数第二笨的办法……如果各位有其他办法也欢迎提出)docker build
时进行npm
安装,如果遇到Socket问题导致安装失败,在Dockerfile
第3行后面增加--maxsockets 1
即可。KOOK_BOT_API_BASE=
的值写http://localhost:8080
、http://0.0.0.0:8080
或http://127.0.0.1:8080
都可以(我让Kook Bot监听8080端口)可能会遇到下面的问题:直接在终端里用curl -L http://0.0.0.0:8080
或curl -L http://127.0.0.1:8080
能连接上,用npm run start
或docker run -t 镜像名
能让Discord bot访问到8080端口,但是换成docker run -d 镜像名
在docker容器里运行时,访问8080端口就会提示Connection Refused
。如果遇到这种情况,把.env
里的KOOK_BOT_API_BASE=
的值设置成http://你的服务器IP
即可。