我想制作间隔消息不和谐机器人
I want to make interval message discord bot
我想让 discord bot 为 ex 发送消息间隔。在 10 分钟内,但它会抛出错误!请帮我!
(对不起,我的英语并不完美)
代码如下:
const Commando = require('discord.js-commando');
const bot = new Commando.Client({commandPrefix: '$'});
const TOKEN = 'here is token';
const MIN_INTERVAL = 100;
bot.registry.registerGroup('connectc', 'Connectc');
bot.registry.registerGroup('defaultc', 'Defaultc');
bot.registry.registerDefaults();
bot.registry.registerCommandsIn(__dirname + "/commands")
bot.on('ready', function(){
console.log("Ready");
});
setInterval(function(){
var generalChannel = bot.channels.get("542082004821213197"); // Replace with known channel ID
generalChannel.send("Hello, world!") ;
}, MIN_INTERVAL);
bot.login(TOKEN);
它抛出这个错误
PS C:\Users\User\Documents\Visual Studio Code\Discord Bots\VblacqeBot> node .
C:\Users\User\Documents\Visual Studio Code\Discord Bots\VblacqeBot\index.js:18
generalChannel.send("Eldo!") ;
^
TypeError: Cannot read property 'send' of undefined
at eldo (C:\Users\User\Documents\Visual Studio Code\Discord Bots\VblacqeBot\index.js:18:20)
at Object.<anonymous> (C:\Users\User\Documents\Visual Studio Code\Discord Bots\VblacqeBot\index.js:28:13)
at Module._compile (internal/modules/cjs/loader.js:689:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10)
at Module.load (internal/modules/cjs/loader.js:599:32)
at tryModuleLoad (internal/modules/cjs/loader.js:538:12)
at Function.Module._load (internal/modules/cjs/loader.js:530:3)
at Function.Module.runMain (internal/modules/cjs/loader.js:742:12)
at startup (internal/bootstrap/node.js:283:19)
at bootstrapNodeJSCore (internal/bootstrap/node.js:743:3)
PS C:\Users\User\Documents\Visual Studio Code\Discord Bots\VblacqeBot>
您可能会在机器人准备就绪之前尝试这样做 - 因为间隔实际上是 毫秒 .
使间隔正确:
const MIN_INTERVAL = 10 * 60 * 1000;
// 10 minutes, 60 seconds in a minute, 1000 milliseconds in a second
确保仅在机器人准备就绪后开始间隔:
bot.on('ready', function(){
console.log("Ready");
setInterval(/* ... */);
});
顺便说一句,您应该使用 Client
上定义的间隔方法 - 它们保证在客户端被销毁时被取消:
bot.setInterval(/*...*/);
参见 https://discord.js.org/#/docs/main/master/class/BaseClient - Commando 的客户端对其进行了扩展。
这取决于你怎么做。例如,我的一个机器人每 4 小时向特定频道发送一条消息,我只使用异步循环功能:
async function notifLoop(){
while(true){
client.channels.get(/*channelid*/).send("This message is sent every ten minutes");
await Sleep(600000)
}
}
使用这个休眠功能:
function Sleep(milliseconds) {
return new Promise(resolve => setTimeout(resolve, milliseconds));
}
这个循环会在我的机器人准备就绪时自动启动,工作方式如下:
bot.on('ready', function(){
notifLoop();
console.log("Ready");
});
现在这取决于您如何托管它,服务器可能每 24 小时重新启动一次(例如 heroku),那么您需要添加时间戳。例如,您可以将其存储在 config.json(如果您使用一个)
我想让 discord bot 为 ex 发送消息间隔。在 10 分钟内,但它会抛出错误!请帮我! (对不起,我的英语并不完美)
代码如下:
const Commando = require('discord.js-commando');
const bot = new Commando.Client({commandPrefix: '$'});
const TOKEN = 'here is token';
const MIN_INTERVAL = 100;
bot.registry.registerGroup('connectc', 'Connectc');
bot.registry.registerGroup('defaultc', 'Defaultc');
bot.registry.registerDefaults();
bot.registry.registerCommandsIn(__dirname + "/commands")
bot.on('ready', function(){
console.log("Ready");
});
setInterval(function(){
var generalChannel = bot.channels.get("542082004821213197"); // Replace with known channel ID
generalChannel.send("Hello, world!") ;
}, MIN_INTERVAL);
bot.login(TOKEN);
它抛出这个错误
PS C:\Users\User\Documents\Visual Studio Code\Discord Bots\VblacqeBot> node .
C:\Users\User\Documents\Visual Studio Code\Discord Bots\VblacqeBot\index.js:18
generalChannel.send("Eldo!") ;
^
TypeError: Cannot read property 'send' of undefined
at eldo (C:\Users\User\Documents\Visual Studio Code\Discord Bots\VblacqeBot\index.js:18:20)
at Object.<anonymous> (C:\Users\User\Documents\Visual Studio Code\Discord Bots\VblacqeBot\index.js:28:13)
at Module._compile (internal/modules/cjs/loader.js:689:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10)
at Module.load (internal/modules/cjs/loader.js:599:32)
at tryModuleLoad (internal/modules/cjs/loader.js:538:12)
at Function.Module._load (internal/modules/cjs/loader.js:530:3)
at Function.Module.runMain (internal/modules/cjs/loader.js:742:12)
at startup (internal/bootstrap/node.js:283:19)
at bootstrapNodeJSCore (internal/bootstrap/node.js:743:3)
PS C:\Users\User\Documents\Visual Studio Code\Discord Bots\VblacqeBot>
您可能会在机器人准备就绪之前尝试这样做 - 因为间隔实际上是 毫秒 .
使间隔正确:
const MIN_INTERVAL = 10 * 60 * 1000; // 10 minutes, 60 seconds in a minute, 1000 milliseconds in a second
确保仅在机器人准备就绪后开始间隔:
bot.on('ready', function(){ console.log("Ready"); setInterval(/* ... */); });
顺便说一句,您应该使用 Client
上定义的间隔方法 - 它们保证在客户端被销毁时被取消:
bot.setInterval(/*...*/);
参见 https://discord.js.org/#/docs/main/master/class/BaseClient - Commando 的客户端对其进行了扩展。
这取决于你怎么做。例如,我的一个机器人每 4 小时向特定频道发送一条消息,我只使用异步循环功能:
async function notifLoop(){
while(true){
client.channels.get(/*channelid*/).send("This message is sent every ten minutes");
await Sleep(600000)
}
}
使用这个休眠功能:
function Sleep(milliseconds) {
return new Promise(resolve => setTimeout(resolve, milliseconds));
}
这个循环会在我的机器人准备就绪时自动启动,工作方式如下:
bot.on('ready', function(){
notifLoop();
console.log("Ready");
});
现在这取决于您如何托管它,服务器可能每 24 小时重新启动一次(例如 heroku),那么您需要添加时间戳。例如,您可以将其存储在 config.json(如果您使用一个)