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

Discord Bot设置Playing状态代码报错求助:参数语法错误

解决Discord Bot状态设置代码的语法错误

看起来你的代码里有几个C#语法和Discord.NET使用的问题,导致了那些标红的编译错误。我来帮你逐一排查并修复:

问题分析

  1. 参数顺序不符合C#规则:C#要求带默认值的方法参数必须放在无默认值参数的后面,你把无默认值的status放在了带默认值参数的前面,这直接违反了语法规范。
  2. 枚举成员引用不完整:Playing是ActivityType枚举的成员,必须完整写成ActivityType.Playing,不能直接裸写枚举值。
  3. 变量名冲突:方法参数里的status和你在方法内定义的局部变量status重名,会导致编译报错。
  4. 客户端实例未初始化:_client字段没有被赋值,运行时会触发空引用异常,必须通过依赖注入或其他方式确保它指向有效的DiscordSocketClient实例。

修正后的完整代码

using Discord;
using Discord.Commands;
using Discord.WebSocket;

public class StatusModule : ModuleBase<SocketCommandContext>
{
    private readonly DiscordSocketClient _client;

    // 通过构造函数注入DiscordSocketClient实例,避免空引用
    public StatusModule(DiscordSocketClient client)
    {
        _client = client;
    }

    [Command("status")] // 添加Command特性,让这个方法成为可触发的Bot命令
    public async Task SetBotStatusAsync()
    {
        var gameStatus = "eating doritos";
        // 修正参数顺序和枚举引用,调用SetGameAsync
        await _client.SetGameAsync(gameStatus, type: ActivityType.Playing);
    }
}

额外说明

  • 我把类名改成了StatusModule,这是Discord.NET模块的常规命名方式,更符合社区规范。
  • 添加了[Command("status")]特性,用户现在可以在Discord里输入!status(根据你的Bot前缀调整)来触发这个状态设置命令。
  • 如果需要支持用户自定义状态文本,可以修改方法为带参数的版本:
    [Command("status")]
    public async Task SetBotStatusAsync([Remainder] string gameStatus)
    {
        await _client.SetGameAsync(gameStatus, type: ActivityType.Playing);
    }
    
    这样用户输入!status eating doritos就能动态设置Bot的状态文本了。

内容的提问来源于stack exchange,提问作者rosen1000

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:41:22