Discord.js in practice (1) - GuessTheNumber
作者:互联网
Discord.js in practice (1) - GuessTheNumber
我们要完成一个机器人小游戏:猜数字。玩家猜的数字比正确答案大时,机器人回复:大了;小的时候同理。
一个玩家一个题目,同一时刻,允许不同玩家同时猜他们自己的谜题。
玩家可以反复猜,直到报出正确答案为止,游戏结束。
这是一个很简单的交互游戏,练的就是对消息的回复。
我们可以参考 Bot in Discord with discord.js 的 (1) ~ (10) 来完成具体设置:
https://www.cnblogs.com/hhzm/tag/Discord/
我们还可以添加以下功能:
- 只有拥有身份组
GuessTheNumberMod
的成员可以对游戏难度进行设置。
听起来很有趣也很简单,是吧,下面就来开始吧!
首先不要着急敲代码,先考虑考虑用什么方式来实现什么:
- 要用
/new
/play
/start
来开始游戏。 - 在游戏中,通过在频道里直接输入
exit
并回车(注意这不是一个斜杠命令)来强制结束游戏。 - 要用
/config
设置难度系数。该命令只对GuessTheNumberMod
身份组成员有效。 - 用
/display-setting
显示难度系数。
我们要求数据存放在磁盘上,也就是说,机器人后台程序一关闭,难度配置不应该消失。
现在,让我们开始吧!
新建文件夹 guess_the_number
,作为我们的项目根目录。按闪电豹猫的文章 Bot in Discord with discord.js (1) 创建一个全新的机器人,名叫 “GuessTheNumber”。
注意:我们用的 discord.js 的版本是 v14
为避免本文冗长,全部源代码就放这里了: https://github.com/wtflmao/guess_the_number
关键文件 commands/new.js
几乎每行代码都有注释,所以这里不再为代码逻辑做解释。
关键文件 commands/conf/conf.js
虽然位于 commands 文件夹,但它不是一份斜杠命令的源代码。这个文件导出了游戏配置的类:
module.exports = class Conf {
constructor(multiplier, easyBase, normalBase, hardBase) {
this.multiplier = multiplier;
this.easyBase = easyBase;
this.normalBase = normalBase;
this.hardBase = hardBase;
};
toStr() {
return `{\n\t"multiplier": "${this.multiplier}",\n\t"easyBase": "${this.easyBase}",\n\t"normalBase": "${this.normalBase}",\n\t"hardBase": "${this.hardBase}"\n}`;
}
fromString(jsonStr) {
const obj = JSON.parse(jsonStr);
return new Conf(obj.multiplier, obj.easyBase, obj.normalBase, obj.hardBase);
}
}
关键文件 commands/settings.js
的第 17 行:
if (!interaction.member.roles.cache.some(role => role.id === '999960036904276008')// role: GuessTheNumberMod
这里的 999960036904276008 是在笔者的服务器的身份组 GuessTheNumberMod
的 snowflake id,你需要在你自己的服务器创建一个身份组(名字无所谓,这里判断的是 id),然后把这行代码里的 id 替换掉,机器人才能正常工作。
注意,要先运行斜杠命令 /setting
来让机器人在磁盘上生成一个配置文件,否则无法玩游戏。Github repo 里已创建好了一个文件用作配置文件。
下面是效果图:
/setting value: 2
/display-setting
/new mode: Easy
游戏中输入 exit 强制退出:
关于本项目,有任何问题,都可以联系我的电子邮箱 wtflmao # 126.com (请把 # 替换成 @)。
原文链接:https://www.cnblogs.com/hhzm/p/16508453.html
转载需注明出处,代码遵守 Apache 2.0 开源协议
标签:GuessTheNumber,obj,easyBase,hardBase,practice,js,normalBase,multiplier 来源: https://www.cnblogs.com/hhzm/p/16508453.html