我很快就会制作一个免费的公共机器人,但我遇到了一些麻烦。 我正在尝试使用一个命令(例如:-bitcoin)使机器人每 30 秒在公会(机器人昵称)中更改一次名称,但是当创建一个函数并循环它以使其成为可能时,机器人不能再次获取公会ID,因为第二次及以后没有消息回复。
if(command === 'bitcoin'){
updateNickname(message);
setInterval(updateNickname, 30000);
}
async function updateNickname(message) {
const { data } = await axios.get(`https://api.coingecko.com/api/v3/simple/price?ids=bitcoin&vs_currencies=eur`);
return message.guild.me.setNickname(`BTC = ${data.bitcoin.eur}€`);
}
有人可以帮我吗?
免责声明:我不能只缓存一个 id,因为它不能在其他服务器上工作,它只能在我发短信的服务器 id 中工作,所以我希望它同时在多个服务器上工作(在进一步的开发中,人们将能够为各个服务器选择自己的加密货币和货币)。
答案 0 :(得分:3)
我可能会将这些数据保存在数据库中(因为我猜您希望它在机器人重新启动之间保持不变)。
然后,我将每 30 秒运行 1 次间隔,一次更新所有公会。这在你的机器人上也应该更容易,因为你没有为每个安装了这个机器人的公会设置不同的间隔。
if(command === 'bitcoin'){
updateNickname(message.guild, message.data);
await persistInDatabase({
guildId: message.guild.id
coin: message.data
});
}
// run this every 30 seconds.
setInterval(updateNicknames, 30000);
// change nickname for a single guild
async function updateNickname(guild, coin) {
const { data } = await axios.get(`https://api.coingecko.com/api/v3/simple/price?ids=bitcoin&vs_currencies=eur`);
return guild.me.setNickname(`BTC = ${data.bitcoin.eur}€`);
}
// change nickname for ALL guilds this bot is installed on
async function updateNicknames() {
const allGuilds = await getAllFromDb();
for(let dbGuild of allGuilds) {
const guild = client.guilds.get(dbGuild.guildId);
updateNickname(guild, dbGuild.coin);
}
}