📜  如何在discord bot c#中收集用户的输入(1)

📅  最后修改于: 2023-12-03 14:52:42.672000             🧑  作者: Mango

如何在 Discord Bot C# 中收集用户的输入

Discord Bot 是一个非常流行的聊天机器人,在 C# 中编写 Discord Bot 可以非常方便的进行开发。然而,收集用户的输入是开发 Discord Bot 的一个关键方面。在这篇文章中,我们将介绍如何在 Discord Bot C# 中收集用户的输入。

1. Discord Bot 的基本结构

在开始之前,让我们快速回顾一下 Discord Bot 的基本结构。在 C# 中编写 Discord Bot 的主要部分如下:

using Discord;

//...

public class MyBot
{
    private DiscordClient _client;

    public MyBot()
    {
        _client = new DiscordClient();

        _client.MessageReceived += OnMessageReceived;

        _client.Connect("<bot-token>", TokenType.Bot);
    }

    private void OnMessageReceived(object sender, MessageEventArgs e)
    {
        // Handle message
    }
}

这里我们创建了一个 MyBot 类,内部有一个 DiscordClient 变量 _client。在构造函数中初始化了 _client,并监听了 _client.MessageReceived 事件。当有消息发送到 Discord Bot 时,该事件将被触发,我们将在 OnMessageReceived 函数中处理消息。

2. 获取用户输入

OnMessageReceived 函数中,我们可以获得用户的输入。用户的输入是包含在消息对象(Message)中的。首先,我们需要检查消息是否来自于一个真实的用户:

private async void OnMessageReceived(object sender, MessageEventArgs e)
{
    if (e.Message.IsAuthor) return; // Ignore messages sent by our bot
    if (e.Message.User.IsBot) return; // Ignore messages sent by other bots

    // Handle message
}

在这个样例中,我们忽略了所有来自于我们的机器人以及其他机器人的消息。接下来,我们需要检查消息是否为用户所期望的:

private async void OnMessageReceived(object sender, MessageEventArgs e)
{
    if (e.Message.IsAuthor) return; // Ignore messages sent by our bot
    if (e.Message.User.IsBot) return; // Ignore messages sent by other bots

    if (!e.Message.Content.StartsWith("!hello")) return; // Ignore messages that do not start with '!hello'

    // Handle message
}

在这个样例中,我们只处理以'!hello'开头的消息。接下来,我们要提取用户输入的数据:

private async void OnMessageReceived(object sender, MessageEventArgs e)
{
    if (e.Message.IsAuthor) return; // Ignore messages sent by our bot
    if (e.Message.User.IsBot) return; // Ignore messages sent by other bots

    if (!e.Message.Content.StartsWith("!hello")) return; // Ignore messages that do not start with '!hello'

    string input = e.Message.Content.Split(' ')[1]; // Extract the input from the message

    // Handle message
}

在这个样例中,我们使用空格切分消息,并将第2部分作为输入。请注意,这里我们只是提取了输入,但还没有处理它。最后,我们需要回复用户:

private async void OnMessageReceived(object sender, MessageEventArgs e)
{
    if (e.Message.IsAuthor) return; // Ignore messages sent by our bot
    if (e.Message.User.IsBot) return; // Ignore messages sent by other bots

    if (!e.Message.Content.StartsWith("!hello")) return; // Ignore messages that do not start with '!hello'

    string input = e.Message.Content.Split(' ')[1]; // Extract the input from the message

    await e.Channel.SendMessage($"Hello, {input}!"); // Reply to the user with the input

    // Handle message
}

在这个样例中,我们使用 e.Channel.SendMessage 函数向用户发送回复。我们在消息字符串中使用 {} 来插入输入字符串。

3. 结论

在这篇文章中,我们介绍了如何在 Discord Bot C# 中收集用户的输入。我们涵盖了从消息对象中提取输入,以及如何回复用户。希望这篇文章能够帮助你更好地编写 Discord Bot!