如何在Discord Bot启动时设置「Playing」状态?
实现Bot启动时自动设置状态的方案
核心思路
利用Discord.Net客户端的Ready事件(Bot成功连接并初始化完成后触发),在该事件中调用状态更新逻辑,实现启动时自动设置「Playing」状态。同时将状态更新逻辑抽成通用方法,让手动命令和自动初始化复用同一段代码,避免重复。
具体代码实现
1. 抽取通用状态更新方法
把原命令中的状态更新逻辑抽成独立私有方法,方便复用:
private async Task UpdateBotStatusAsync(DiscordClient client, string statusMessage) { var activity = new DiscordActivity { Name = statusMessage }; await client.UpdateStatusAsync(activity); }
2. 修改原status命令方法
让原命令调用通用方法,简化代码逻辑:
[Command("status")] public async Task SetBotStatus(CommandContext ctx, string message) { // 权限校验 if (ctx.User.Id == 572877986223751188 || ctx.User.Id == 327845261692895232) { await UpdateBotStatusAsync(ctx.Client, message); await ctx.RespondAsync("Bot状态已更新"); } else { await ctx.RespondAsync("你没有权限执行此命令"); } }
3. 在Bot初始化时订阅Ready事件
在Bot.cs的客户端初始化代码中,订阅Ready事件,启动时自动设置默认状态:
public class Bot { public async Task StartAsync() { var discord = new DiscordClient(new DiscordConfiguration { Token = "你的Bot令牌", TokenType = TokenType.Bot }); // 订阅Ready事件,Bot启动完成后自动设置状态 discord.Ready += async (sender, args) => { // 替换为你想要的默认状态文本 string defaultStatus = "正在运行中..."; await UpdateBotStatusAsync(discord, defaultStatus); Console.WriteLine("Bot默认状态已初始化"); }; // 注册命令模块 discord.UseCommands(); discord.Commands.AddModule<YourCommandModule>(); // 替换为你的命令模块类名 // 启动Bot await discord.ConnectAsync(); await Task.Delay(-1); } }
关键说明
Ready事件是Bot完成Discord连接、初始化后的触发点,在这里执行状态更新能确保客户端处于可用状态,避免初始化阶段的异步问题。- 如果需要动态配置默认状态(比如从配置文件读取),只需将
defaultStatus的赋值逻辑替换为读取配置的代码即可。
内容的提问来源于stack exchange,提问作者user11057786
相关产品推荐
相关产品推荐

