Сделайте Discord-Bot, чтобы ответить на то же сообщение для любой команды - PullRequest
0 голосов
/ 12 июня 2018

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

Я пытался:

[Command("")]
public async Task gg()
{
    await ReplyAsync("gg");
    await Context.Channel.SendMessageAsync("hi there");
}

, но, по-видимому, я получаю ошибку во время выполнениятак как он не может добавить пустую или пустую команду.( журнал ошибок бесполезен ). Если вообще не ставить [Command(string)], это никогда не вызовет задачу, которую я смог разобрать.

Ответы [ 2 ]

0 голосов
/ 12 июня 2018

Предполагая, что вы, следуя учебным пособиям по Discord.NET , при настройке службы команд ...

Возможно, у вас есть функция HandleCommand или что-то подобное.Он должен содержать строку кода, которая выглядит следующим образом:
if(!(message.HasStringPrefix("PREFIX", ref argPos))) return;
Что в основном означает «если это сообщение не имеет префикса в начале, выйдите из функции».(Где message - это SocketUserMessage, а argPos - это int, обычно 0)

Поставьте после этого строку кода, чтобы она выглядела следующим образом ...

//Blah
if(!(message.HasStringPrefix("PREFIX", ref argPos))) { return; }
await message.Channel.SendMessageAsync("blah");
//stuff

Но если вы хотите, чтобы бот отвечал только в том случае, если бот не находит подходящую команду для текущей команды, отправляемой пользователем, вы можете сделать это вместо:

if(!(message.HasStringPrefix("PREFIX", ref argPos))) { return; }
            var context = new CommandContext(client, message);
            var result = await commands.ExecuteAsync(context, argPos, service);

            if(!result.IsSuccess) {
                //If Failed to execute command due to unknown command
                if(result.Error.Value.Equals(CommandError.UnknownCommand)) {
                    await message.Channel.SendMessageAsync("blah");
                } else {
                    //blah
                }
            }
0 голосов
/ 12 июня 2018

Невозможно реализовать это как команду.Вы должны подписаться на MessageReceived событие вашего DiscordSocketClient и просто отправить сообщение обратно на канал при его запуске.

private async Task OnMessageReceived(SocketMessage socketMessage)
{
    // We only want messages sent by real users 
    if (!(socketMessage is SocketUserMessage message))
        return;

    // This message handler would be called infinitely
    if (message.Author.Id == _discordClient.CurrentUser.Id)
        return;

    await socketMessage.Channel.SendMessageAsync(socketMessage.Content);
}
...