我正在尝试使用D#+设置Discord机器人的状态,但是每次都会给我一个nullreference异常

问题描述

这可能也不是做到这一点的方法,但是如果不是这样,我就找不到合适的方法。无论如何,这是我的代码

await discord.UpdateStatusAsync(new discordGame("?help")); // Line 101

这是错误

System.NullReferenceException
  HResult=0x80004003
  Message=Object reference not set to an instance of an object.
  Source=DSharpPlus
  StackTrace:
   at DSharpPlus.discordClient.InternalUpdateStatusAsync(discordGame game,Nullable`1 user_status,Nullable`1 idle_since)
   at DSharpPlus.discordClient.UpdateStatusAsync(discordGame game,Nullable`1 idle_since)
   at theorangeguy.Program.<MainAsync>d__7.MoveNext() in C:\1notrllysure\coding\theorangeguy\C#\theorangeguy\theorangeguy\Program.cs:line 101

如果您想知道的话,该机器人名称是我和一些朋友的笑话。

解决方法

有点晚了,但这是答案:

您可以简单地创建一个为您设置的命令/类。我是这样做的:

    [Hidden]
    [Command("setactivity")]
    private async Task setactivity(CommandContext ctx)
    {
        if (ctx.User.Id == YourDiscordID)
        {
            DiscordActivity activity = new DiscordActivity();
            DiscordClient discord = ctx.Client;
            string input = Console.ReadLine();
            activity.Name = input;
            await discord.UpdateStatusAsync(activity);
            return;
        }
        else
        {
            return;
        }
    }

我只使用 Console.ReadLine();在这里提示,以便我可以随时更改它。我也把我的 ID 放在那里,所以只有我可以运行命令。如果机器人的规模更大,我建议不要像那样更改名称。 (另外提醒一下,您只能设置它正在玩的游戏,而不是自定义状态。)