C# 如何在没有命令的情况下发送消息?

C# 如何在没有命令的情况下发送消息?,c#,discord.net,C#,Discord.net,我想设置一个Discord.NETC#bot,以便在持续运行的代码上发生错误时输出消息 如何在不监听消息的情况下向任何频道发送消息 所有教程都会创建依赖命令的命令,以使机器人“回复”给您。这可能吗 这是我的C代码 我想要不带命令的Sendmessage public async Task RunBotAsync() { _client = new DiscordSocketClient(new DiscordSocketConfig {

我想设置一个Discord.NETC#bot,以便在持续运行的代码上发生错误时输出消息

如何在不监听消息的情况下向任何频道发送消息

所有教程都会创建依赖命令的命令,以使机器人“回复”给您。这可能吗

这是我的C代码

我想要不带命令的Sendmessage

    public async Task RunBotAsync()
    {
        _client = new DiscordSocketClient(new DiscordSocketConfig
        {
            WebSocketProvider = WS4NetProvider.Instance
        });

        _commands = new CommandService();

        _services = new ServiceCollection()
            .AddSingleton(_client)
            .AddSingleton(_commands)
            .BuildServiceProvider();

        string BotToken = "my_token";

        _client.Log += Log;

        await RegisterCommandsAsync();

        await _client.LoginAsync(TokenType.Bot, BotToken);

        await _client.StartAsync();

        await Task.Delay(-1);

    }
我试过这个:

public async Task Announce() // 1
{
    DiscordSocketClient _client = new DiscordSocketClient(); // 2
    ulong id = 123456789012345678; // 3
    var chnl = _client.GetChannel(id) as IMessageChannel; // 4
    await chnl.SendMessageAsync("Announcement!"); // 5
}
但是我得到了一个错误,说
Errro-NullException-chl=Null


如何修复此问题?

好的,根据我的理解,我假设您的
\u客户端在方法中。要在机器人所在的频道中发送消息,可以执行以下操作

await _client.GetGuild(guild_id_here).GetTextChannel(channel_id_here).SendMessageAsync("your messagee");

您将获得一个
NullException
,因为您正在
Announce()
方法中创建
DiscordSocketClient
。 通过查看您的代码,我假设您正在使用
Discord.Net
库,在这种情况下,持有此方法的类:

public async Task Announce() // 1
{
    DiscordSocketClient _client = new DiscordSocketClient(); // 2
    ulong id = 123456789012345678; // 3
    var chnl = _client.GetChannel(id) as IMessageChannel; // 4
    await chnl.SendMessageAsync("Announcement!"); // 5
}
应该继承自
ModuleBase
,如下所示:

public class MyClass : ModuleBase<SocketCommandContext>
{
    //...
    public async Task Announce() // 1
    {
        //...
    }
}
这将至少修复您的
NullException
,但仍然无法回答您的问题,因此让我们尝试以下方法:

CommandService
类负责使用方法
ExecuteAsync(ICommandContext、Int32、IServiceProvider、MultiMatchHandling)执行Discord接收的命令。

该方法返回一个
IResult
对象,其中包含以下属性:

如果其中一个命令无法执行,以及为什么使用这些属性,您可以获得相关信息,这并没有涵盖所有代码,但至少涵盖了命令部分。您可以使用第三方库来处理整个应用程序中的错误处理,或者构建自己的实现,例如,使用
try{}catch(Exception){}
块(您知道可能会发生错误)并自行处理异常


如果您需要更多帮助,请随时与我联系。

请尽快更改您的机器人令牌。首先,我很抱歉您的回复太慢。我读到了你的答案。我不知道C#,我认为不理解C#结构有问题。我将用你的答案进一步了解结构和过程。谢谢你的友好和感谢的答复。祝您有个美好的一天!我发现了问题所在。也许,我尝试在我的Announce()方法中重新创建DiscordSocketClient。谢谢你的回复。
public async Task Announce() // 1
{
    DiscordSocketClient _client = Context.Client; // 2
    ulong id = 123456789012345678; // 3
    var chnl = _client.GetChannel(id) as IMessageChannel; // 4
    await chnl.SendMessageAsync("Announcement!"); // 5
}