其他分享
首页 > 其他分享> > Discord.js in practice (1) - GuessTheNumber

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/

我们还可以添加以下功能:

听起来很有趣也很简单,是吧,下面就来开始吧!

首先不要着急敲代码,先考虑考虑用什么方式来实现什么:

我们要求数据存放在磁盘上,也就是说,机器人后台程序一关闭,难度配置不应该消失。

现在,让我们开始吧!

新建文件夹 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
image

/display-setting
image

/new mode: Easy
image

游戏中输入 exit 强制退出:
image

关于本项目,有任何问题,都可以联系我的电子邮箱 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