如何为Discord.js 14.6.0设置机器人状态?附现有代码
在Discord.js 14.6.0中设置机器人状态
在Discord.js v14中,设置机器人状态必须在ready事件回调内操作——只有当机器人完全登录完成后,client.user对象才会被初始化,此时才能修改状态。以下是几种直接可用的实现方案:
1. 设置基础在线状态
可设置机器人的基础在线状态,可选值为Online(在线)、Idle(闲置)、DoNotDisturb(请勿打扰)、Invisible(隐身):
client.on('ready', () => { console.log(`Logged in as ${client.user.tag}!`); client.user.setStatus('Online'); });
2. 设置自定义活动(游戏/直播等)
结合ActivityType可以实现更丰富的状态展示,比如“正在玩XX”“正在听XX”等效果。首先需要导入ActivityType:
const { Client, GatewayIntentBits, ActivityType } = require('discord.js');
然后在ready事件中添加状态设置逻辑,以下是不同类型的示例:
client.on('ready', () => { console.log(`Logged in as ${client.user.tag}!`); // 示例1:显示「正在玩Discord.js」 client.user.setPresence({ activities: [{ name: 'Discord.js', type: ActivityType.Playing }], status: 'Online', }); // 示例2:显示「正在听Spotify」 // client.user.setPresence({ // activities: [{ name: 'Spotify', type: ActivityType.Listening }], // status: 'Idle', // }); // 示例3:显示「正在看Netflix」 // client.user.setPresence({ // activities: [{ name: 'Netflix', type: ActivityType.Watching }], // status: 'DoNotDisturb', // }); // 示例4:直播状态(需填写合法直播链接) // client.user.setPresence({ // activities: [{ name: '我的直播', type: ActivityType.Streaming, url: 'https://twitch.tv/你的频道' }], // status: 'Online', // }); });
修改后的完整代码
将状态设置逻辑整合到你的现有代码中,最终版本如下:
const { REST, Routes } = require('discord.js'); const commands = [ { name: 'ping', description: 'Replies with Pong!', }, ]; const rest = new REST({ version: '10' }).setToken("MY-TOKEN"); (async () => { try { console.log('Started refreshing application (/) commands.'); await rest.put(Routes.applicationCommands("CLIENT-ID"), { body: commands }); console.log('Successfully reloaded application (/) commands.'); } catch (error) { console.error(error); } })(); const { Client, GatewayIntentBits, ActivityType } = require('discord.js'); const client = new Client({ intents: [GatewayIntentBits.Guilds] }); client.on('ready', () => { console.log(`Logged in as ${client.user.tag}!`); // 自定义活动状态 client.user.setPresence({ activities: [{ name: '第一个JS项目', type: ActivityType.Playing }], status: 'Online', }); }); client.on('interactionCreate', async interaction => { if (!interaction.isChatInputCommand()) return; if (interaction.commandName === 'ping') { await interaction.reply('Pong!'); } }); client.login("MY-TOKEN");
排查要点
- 运行
npm list discord.js确认当前版本确实为14.6.0; - 绝对不要在
client.login()之前调用setPresence,必须等待ready事件触发; - 检查机器人在服务器内的权限,确保没有被限制状态展示。
内容的提问来源于stack exchange,提问作者K1ingu
相关产品推荐
相关产品推荐

