node.js - 我的消息在 node.js/discord.js 中重复了很多次
问题描述
我正在制作一个 ONUW(One Night Ultimate Werewolf)Discord 机器人,它可以让你玩游戏。
对于游戏,我需要一个 2 分半钟的计时器。我试着做一个。它运行命令,然后倒计时,但它至少重复消息 8 次。我希望它会说“你的时间已经开始了!跳到 ONUW 讨论语音频道,告诉每个人你的角色,或者试着欺骗别人。记住,有些人可能会撒谎,所以你不知道他们到底是谁!” 一次,然后在 2.5 分钟后,它会说“时间到了!投票给你想杀死的人!”,再一次,只有一次。
这是完整的代码文件。
//required libraries
const Discord = require('discord.js');
const client = new Discord.Client();
//What to do when the bot starts up.
client.on('ready', () => {
console.log(`Logged in as ${client.user.tag}!`);
client.user.setActivity("with my ding-a-ling")
});
//prefix
var prefix = ("~")
//checks api latency and latency
client.on('message', message => {
if (message.author.bot) return;
if (message.content === prefix + 'ping') {
message.channel.send(":ping_pong: Pinging...").then((ping) => { ping.edit(`:ping_pong: Pong!\nLatency is ${Math.floor(ping.createdAt - message.createdAt)}\nAPI latency is ${Math.round(client.ping)}ms`); });
}
}
);
//starts a new game and broadcasts that
client.on('message', message => {
if (message.author.bot) return;
if (message.content === prefix + 'newgame') {
if (message.member.roles.has("641725420957335562")) {
client.channels.get('642070729805791232').send("Sending out message....").then((newgame) => { newgame.edit(`Hey, <@&641727807663374345>! A new game is starting. Do ~ready to apply`) })
}
client.on('message', message => {
if (message.author.bot) return;
if (message.content !== prefix + 'ready') {
return;
}
if (message.content === prefix + 'ready')
{message.channel.send(`<@${message.author.id}> is ready!`)
var roles = Array("Doppelganger", "Werewolf", "Minion", "Mason", "Seer", "Robber", "Troublemaker", "Drunk", "Insomniac", "Villager", "Tanner", "Hunter", "Bartender", "Wolf", "Egotist")
var role = roles[Math.floor(Math.random() * roles.length)];message.author.send("Your role is..." + role + "!")
}
client.on('message', message => {
if (message.content === prefix + 'begin') {
function begin() {
// stuff you want to happen right away
message.channel.send('The game will begin in...')
}
function beginCount() {
// all the stuff you want to happen after that pause
message.channel.send('3')
}
function beginCount2() {
message.channel.send('2')
}
function beginCount3() {
message.channel.send('1')
}
function nightFall() {
message.channel.send('Night has fallen!')
}
function countdownRun() {
message.channel.send('~countdown').then(message => { messsage.delete(1000)})
}
// call the first chunk of code right away
begin();
setTimeout(beginCount, 2000);
setTimeout(beginCount2, 2000);
setTimeout(beginCount3, 2000);
setTimeout(nightFall, 2000);
setTimeout(countdownRun, 2000);
};
client.on('message', message => {
if (message.content === prefix + 'countdown') {
function function1() {
// stuff you want to happen right away
message.channel.send('Your time has begun! Hop over to ONUW Discussion Voice Channel and tell everyone your role, or try and trick people. Remember, some people may lie so you don\'t know who they really are!')
}
function function2() {
// all the stuff you want to happen after that pause
message.channel.send('Times up! Vote for who you want to kill!')
}
// call the first chunk of code right away
function1();
// call the rest of the code and have it execute after 3 seconds
setTimeout(function2, 150000);
}
})
});
})}
});
//logs messages into console
client.on("message", async message => {
console.log(`${message.author.username} said: ${message.content}`);
});
//Test command if we need it
client.on('message', message => {
if (message.author.bot) return;
if (message.content === prefix + 'test') {
message.channel.send("test reply")
}
});
client.login(process.env.TOKEN);
任何帮助,将不胜感激。
谢谢。
解决方案
推荐阅读
- ios - IOS:AccessoryButtonTapped 导致立即重新加载 tableview 是正常行为吗?
- java - 使用 Lombok 访问私有内部类
- .net-core - 作为 Windows 服务运行时,在 .net core 3 的工作服务中未调用 StopAsync
- r - 循环多个数据帧到ggplot
- java - 插入新行时出现休眠错误:CannotCreateTransactionException:无法打开 JPA EntityManager 进行事务处理
- d3.js - D3鼠标光标周围没有出现
- netlogo - 限制我列表中所有值的小数
- world-of-warcraft - 玩家 'Helias' (1) 发现未知区域(x: y: z: map: )
- c# - 使用 .NET 系统将字符数组转换为字符串?
- php - 我想从 PDO 中的数据库中从树枝中获取多个对象的数据