我需要使频道名称成为最后一条消息的内容。我知道API的限制(10分钟内有2次更改),所以我只希望它每5分钟运行一次。
这是我尝试过的:
const prefix = " ";
function myfunction () {
if(!message.content.startsWith(prefix) || message.author.bot) return;{
var var1 = message.content();
channel.setName(`-counting`+ var1);
}
}
client.once('ready', () => {
console.log(`Logged in as ${client.user.tag}!`);
});
client.on('message', message =>{
setInterval(myfunction,);
});
答案 0 :(得分:2)
正如@Jakye在注释中指出的那样,您当前的代码会在每条消息中创建一个setInterval
,这不是您想要的。我认为最好的做法是保存最新消息,定义一个设置通道名称的函数,并在setInterval
事件上创建一个ready
。看下面的代码示例:
const prefix = '<YOUR PREFIX>';
let latestMessage = undefined;
function updateChannelName() {
// If the latestMessage is undefined, return out of the function
if (!latestMessage) return;
latestMessage.channel.setName(`-counting${latestMessage.content}`);
}
client.once('ready', () => {
// Once the client is ready, create the interval.
// The 5 * 60 * 1000 equals to 5 minutes in milliseconds but it's more readable than writing 300000
setInterval(updateChannelName, (5 * 60 * 1000));
});
client.on('message', message => {
// Check for author and prefix
if (!message.content.startsWith(prefix) || message.author.bot) return;
// Update the latestMessage to the latest message
latestMessage = message;
});