【问题标题】:c# discord.net How to get input while executing commandc# discord.net 如何在执行命令时获取输入
【发布时间】:2020-10-09 22:42:59
【问题描述】:

我正在使用 discord.net 制作一个不和谐机器人。然后,使用“搜索”命令,我将收到一个新的聊天并选择一个从 1 到 5 的数字来工作。我该怎么办?这是源代码的一部分。

'''

[Command("search")]
public async Task Search()
{
    await ReplyAsync("Choose number from 1 to 5");

    int number = 0;

    //number = WaitCommand(); <= How can I make this?

    await ReplyAsync($"Your number is {number}.");
}

'''

此问题没有可用的方法参数。有什么办法吗?

【问题讨论】:

  • 我非常怀疑是否存在,因为这会遇到基本问题,例如:如果用户不再提供任何输入,你会怎么做?您等待更多输入多长时间?你不能这样设计异步执行的代码
  • @UnholySheep 如果用户一分钟没有提供输入,它将退出该功能。像 Ayana (js) 这样的一些不和谐机器人提供了类似的功能。这在 c# 中可能吗?
  • 我不知道该机器人在内部是如何工作的,但我认为它会这样做(我在另一个机器人中做过类似的事情)是它手动存储该信息,例如:它在某处有一个查找表,当用户开始一个特定的操作,然后运行一个计时器来清除它。在通用库中执行此操作会很困难,因为它不知道您何时要启动特定的“状态存储”、存储什么或哪些操作会重置此类计时器
  • 这是图书馆支持频道中此类问题的标准回复 - discord.gg/discord-api

标签: c# discord discord.net


【解决方案1】:

如果还没有回答,您可以将params string[] args 作为参数添加到您的命令函数中。用户在您的命令之后写入的所有内容都将被解析为该内容。我已经修改了你的命令来处理这个。

[Command("search")]
    public async Task Search(params string[] args)
    {
        if(args.Length == 0 || !int.TryParse(args[0], out int number))
        {
            await ReplyAsync("You have to enter a number!");
            return;
        }

        await ReplyAsync($"Your number is {number}.");
    }

[prefix]search 现在将产生“你必须输入一个数字!”
[prefix]search 3 输出“你的数字是 3。”

或者,如果您想在用户使用该命令后向他们询问一个数字,您可以保存当前用户的 id 并使用 Discord.MessageReceived 等待他的下一条消息,然后在另一个函数中使用它。

【讨论】:

    猜你喜欢
    • 2020-11-23
    • 2010-10-03
    • 2013-01-01
    • 1970-01-01
    • 2020-10-21
    相关资源
    最近更新 更多