【发布时间】:2021-09-26 22:48:14
【问题描述】:
我有一个不和谐的机器人,当说一个词时会触发它,我最初让它只说一件事(原帖在这里供参考:Discord bot unintentionally spamming messages after user response)但我现在希望它有多个说法,所以我用带有由随机数生成器函数生成的随机数的 switch 语句,它在 switch 语句中被调用以用于消息输出。由于某种原因,我的代码不起作用,我不确定为什么。
let Discord;
let Database;
if(typeof window !== "undefined"){
Discord = DiscordJS;
Database = EasyDatabase;
} else {
Discord = require("discord.js");
Database = require("easy-json-database");
}
const delay = (ms) => new Promise((resolve) => setTimeout(() => resolve(), ms));
const s4d = {
Discord,
client: null,
tokenInvalid: false,
reply: null,
joiningMember: null,
database: new Database("./db.json"),
checkMessageExists() {
if (!s4d.client) throw new Error('You cannot perform message operations without a Discord.js client')
if (!s4d.client.readyTimestamp) throw new Error('You cannot perform message operations while the bot is not connected to the Discord API')
}
};
s4d.client = new s4d.Discord.Client({
fetchAllMembers: true
});
s4d.client.on('raw', async (packet) => {
if(['MESSAGE_REACTION_ADD', 'MESSAGE_REACTION_REMOVE'].includes(packet.t)){
const guild = s4d.client.guilds.cache.get(packet.d.guild_id);
if(!guild) return;
const member = guild.members.cache.get(packet.d.user_id) || guild.members.fetch(d.user_id).catch(() => {});
if(!member) return;
const channel = s4d.client.channels.cache.get(packet.d.channel_id);
if(!channel) return;
const message = channel.messages.cache.get(packet.d.message_id) || await channel.messages.fetch(packet.d.message_id).catch(() => {});
if(!message) return;
s4d.client.emit(packet.t, guild, channel, message, member, packet.d.emoji.name);
}
});
s4d.client.login('TOKEN').catch((e) => { s4d.tokenInvalid = true; s4d.tokenError = e; });
function GetRandomInteger(a, b){
if (a > b){
small = b;
large = a;
}
else{
small = a;
large = b;
}
s4d.client.on('message', async (s4dmessage) => {
if (s4dmessage.author.bot) return;
if (s4dmessage.content.includes('apples')) {
switch(GetRandomInteger(1,5)){
case 1: s4dmessage.channel.send(String('yum I love apples!')); break;
case 2: s4dmessage.channel.send(String('apples are the best')); break;
case 3: s4dmessage.channel.send(String('did someone say apples?')); break;
case 4: s4dmessage.channel.send(String('apples are great!')); break;
case 5: s4dmessage.channel.send(String('yum yum!')); break;
}
}
});
s4d;
【问题讨论】:
-
GetRandomInteger 函数中缺少一个 },这样它就变成了一个递归函数
-
这就是你的
GetRandomInteger()功能吗?正如法比奥所提到的,缺少一个大括号,但该函数不会返回任何内容,不确定你想用它做什么。还有,你为什么用String构造函数?
标签: javascript discord discord.js switch-statement case