javascript - Discord.js 显示状态中的禁令数量
问题描述
我有一个用于特定服务器的机器人,我想将状态设置为服务器的禁令数量。
我有以下代码,但我无法获得banned.size
:
client.on("ready", () => {
message.guild.fetchBans().then(banned => {
let sizee = banned.size
})
setInterval(function() {
let lol = ['status 1', `status 2`, `Status 3`, `status 4`, `this guild has ${sizee} banned users `];
let f = ['LISTENING', 'WATCHING', 'LISTENING', 'PLAYING', 'WATCHING'];
let status = lol[Math.floor(Math.random()*lol.length)];
client.user.setActivity(status, {type: f[Math.floor(Math.random()*f.length)]})
}, 15000)
client.user.setPresence({ status: 'online' })
console.log(`Logged in as ${client.user.tag}!`);
});
解决方案
您没有或没有收到message
该事件的对象,ready
因此您无法从中获得公会。您将需要通过其 ID 找到公会。client.guilds.cache.get()
应该做的伎俩。
一旦你有了公会,你需要移动fetchBans()
到回调中setInterval
,所以它每次都会获取它。如果你在它之外获取它,它只会在你启动机器人时获取一次,并且除非你重新启动你的机器人,否则它不会被更新。
then
您可以使用异步函数并只await
使用结果,而不是与 s 斗争。
如果您添加公会 ID,则以下示例将起作用。我也添加了一些评论:
client.on('ready', () => {
// get the guild once the bot is ready
// make sure you add the guild id
const guild = client.guilds.cache.get('ADD GUILD ID HERE');
client.user.setPresence({ status: 'online' });
// run the updateStatus function every 15s
// we need to pass the client and guild
setInterval(updateStatus, 15000, client, guild);
console.log(`Logged in as ${client.user.tag}!`);
});
// helper function to pick a random element from an array
function pickOne(arr) {
return arr[Math.floor(Math.random() * arr.length)];
}
// async function that fetches the current number of bans
// and updates the status
async function updateStatus(client, guild) {
const bans = await guild.fetchBans();
const statuses = [
'status 1',
'status 2',
'status 3',
'status 4',
`this guild has ${bans.size} banned users`,
];
const activities = [
'LISTENING',
'WATCHING',
'LISTENING',
'PLAYING',
'WATCHING',
];
client.user.setActivity(pickOne(statuses), {
type: pickOne(activities),
});
}
PS:一项改进是仅在您想在状态中显示禁令时才获取禁令。
推荐阅读
- javascript - react js无法在setState回调函数中获取更新值
- ruby-on-rails - 让多个 sidekiq 工作人员可以访问一个变量
- c# - WPF 异步任务错误未触发
- python - 如何将自定义规则添加到 spaCy 标记器以将 HTML 分解为单个标记?
- sql - 将平面 JSON 结构转换为表格
- android - 如何通过 HTTP(S) 向 Android 应用程序发送数据
- amazon-web-services - 如何模拟 API Gateway RestAPI 端点并根据请求在响应中返回自定义变量?
- php - Mac CLI PHP ini 文件位置
- amazon-web-services - 来自 AWS SQS 的选择性读取消息
- swift - 使用四元数的 SceneKit 旋转