You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 11:48:21