Discord подстрока сообщения

В настоящее время я работаю над ботом для разногласий, и я попытался сделать команду, в которой вы что-то вводите, и бот скажет вам это в ответ, только без части !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);
            });
    }

person SugoiSheep    schedule 12.03.2017    source источник


Ответы (1)


Когда вы загружаете сообщения, он возвращает тип данных Message[]. И вы не можете преобразовать его в строку напрямую, чтобы получить сообщение.

Вместо этого используйте e.Args[0], он возвращает тип данных string и содержит сообщение без команды.
Например: внутри моей команды есть код string x = e.Args[0];, и я набираю '!say this'. "это" будет значением x.

Настолько эффективно, что вам даже не нужно будет подставлять его подстроку! Все, что вам буквально нужно сделать, это string message_a = e.Args[0]; и заставить его отправить message_a прямо обратно на канал!

Редактировать: теперь, чтобы позволить боту принимать ввод, за вашим .Do(async... добавьте .Parameter("user", ParameterType.Unparsed). Это позволяет вашему боту получать дополнительные данные от пользователя.

person Kaynn    schedule 13.03.2017
comment
Я понимаю метод, но я не понимаю, как использовать его в коде. пожалуйста, объясните, как вы использовали это в своем коде :) - person SugoiSheep; 14.03.2017
comment
string messageSay = e.Args[0]; await e.Channel.SendMessage(messageSay); , это будет буквально код внутри командной функции. Сначала попробуйте этот код. Во-вторых, обратите внимание, что ваш messageSay является строкой, и вам не нужно подстроку из команды. В-третьих, из вашего старого кода отправьте message_b в текстовый канал, обратите внимание, как это странно. Наконец, вот часть: ваш старый код не работает, потому что нет способа напрямую преобразовать тип данных Message[] в строку, то есть потому, что это массив, а также Discord.NET не работает. есть такая функция еще. - person Kaynn; 14.03.2017
comment
ссылка не работает :/ - person SugoiSheep; 16.03.2017
comment
@SugoiSheep, ты читал отредактированную часть? .Parameter("user", ParameterType.Unparsed) позади .Do(async... . Это в основном позволяет вашему боту читать строку до конца и принимать ее в качестве входных данных. Итак, вы в основном делаете Commands.CreateCommands("command").Parameter("user", ParameterType.Unparsed).Do(async (e) => {/*code*/}); - person Kaynn; 17.03.2017
comment
похоже, что EventArgs не согласен с вами :/ - person SugoiSheep; 18.03.2017
comment
@SugoiSheep e.Args[0] и EventArgs[0] - это две разные вещи. - person Kaynn; 18.03.2017