【问题标题】:Discord substringing a messageDiscord 子串化消息
【发布时间】:2017-03-14 21:24:22
【问题描述】:

我目前正在开发一个不和谐的机器人,我试图在你输入内容的地方发出一个命令,机器人会回复你,只是没有 !say 部分。正如你在这里看到的,我使用了一个子字符串。似乎当下载的消息变成字符串时,它的功能不像一个。 当我将命令置于不和谐状态时,它就不起作用了。我没有收到错误消息。它只是没有响应。

private void RegisterSayCommand()
    {
        commands.CreateCommand("say")
            .Do(async (e) =>
            {
                string messagestosay, message_b;
                int message_sub;
                Message[] message_a;
                message_a = await e.Channel.DownloadMessages(1);
                message_b = message_a.ToString();
                message_sub = message_b.Length;
                messagestosay = message_b.Substring(4, message_sub);

                await e.Channel.SendMessage(messagestosay);
            });
    }

【问题讨论】:

    标签: c# discord


    【解决方案1】:

    当您下载消息时,它会返回一个Message[] 数据类型。而且不能直接转成字符串来获取消息。

    改为使用e.Args[0],它基本上返回string数据类型,并且它包含没有命令的消息。
    例如:我的命令中有一个代码string x = e.Args[0];,然后我输入“!说这个”。 "this" 将是 x 的值。

    如此有效,您甚至不需要为它添加子字符串!您真正需要做的就是string message_a = e.Args[0]; 并将message_a 直接发送回频道!

    编辑: 现在让机器人接受输入,在你的 .Do(async... 后面,添加一个 .Parameter("user", ParameterType.Unparsed)。这允许您的机器人从用户那里获取额外的输入。

    【讨论】:

    • 方法我看懂了,但是不明白代码中怎么用。请进一步解释您如何在代码中使用它:)
    • string messageSay = e.Args[0]; await e.Channel.SendMessage(messageSay); ,这实际上是命令函数中的代码。 首先,试试这个代码。 第二,注意你的messageSay 是一个字符串,以及你如何不需要对命令进行子串化。 第三,从你的旧代码中,将message_b 发送到文本通道,注意它有多奇怪。 最后,这里是部分:你的旧代码不起作用,因为没有办法直接将 Message[] 数据类型转换为字符串,那是因为它是一个数组,而且 Discord.NET 也没有'还没有那种功能。
    • link 它似乎不起作用:/
    • @SugoiSheep 你读过编辑的部分吗? .Parameter("user", ParameterType.Unparsed).Do(async... 后面。它基本上允许您的机器人将字符串读取到最后并将其作为输入。所以你基本上做Commands.CreateCommands("command").Parameter("user", ParameterType.Unparsed).Do(async (e) => {/*code*/});
    • 似乎EventArgs 不同意你的看法:/
    猜你喜欢
    • 2019-07-04
    • 2018-12-04
    • 2021-03-27
    • 2021-08-27
    • 2021-08-12
    • 1970-01-01
    • 2021-08-02
    • 2019-09-16
    • 2021-10-30
    相关资源
    最近更新 更多