Discord bot C# чтение спецификаций c сообщений на запрошенном канале - PullRequest
0 голосов
/ 31 января 2020

Итак, я начал создавать бот-диск с помощью c #; игра на убийство, где человек A печатает «убить», а затем «убивает» человека прямо над отправленным сообщением cmd. Здесь я сталкиваюсь с проблемой; Я не могу найти код, который может сканировать / прочитать идентификатор пользователя сообщения над сообщением автора. В отличие от популярной команды очистки / стирания, в которой вы можете удалить x номеров сообщений, мне нужно, чтобы бот специально «выбрал» конкретное сообщение c. Кто-нибудь получил какие-нибудь подсказки?

Вот пример ситуации:

Человек B: бла бла бла

Человек A (убийца):? Kill

( Бот сканирует / находит автора сообщения над cmd.)

Бот: Человек A убил Человека B!

1 Ответ

0 голосов
/ 01 февраля 2020

Прежде всего, поскольку вы упомянули, что используете DiscordSharp, я лично рекомендую использовать Discord.Net, поскольку библиотека D # не обновлялась уже пару лет и Discord.Net находится в постоянном развитии и имеет дюжину API для подключения к Discord Bot API.

Хотя вы можете подключиться к API из других онлайн-сервисов, таких как LUIS, DialogFlow и таких фреймворков, как Oscova Я запишу код для прямого взаимодействия через Discord.Net.

В Visual Studio:

  • Выберите Tools
  • Выберите NuGet Package Manager и выберите Package Manager Console

Введите следующую команду (после удаления текущего пакета D #)

Install-Package Discord.Net

Вы можете получить идентификатор пользователя и отправьте сообщение нужному каналу / пользователю через объект SocketMessage, полученный в событии Client.MessageReceived.

Client = new DiscordSocketClient();
Client.MessageReceived += ClientOnMessageReceived;

await Client.LoginAsync(TokenType.Bot, "YOUR_BOT_TOKEN");
await Client.StartAsync();

Создайте некоторый обработчик события. В приведенном ниже коде вы можете увидеть, как получить информацию о пользователе и активности.

private async Task ClientOnMessageReceived(SocketMessage socketMessage)
{
    await Task.Run(() =>
    {
        //Activity is not from a Bot.
        if (!socketMessage.Author.IsBot)
        {

            var authorId = socketMessage.Author.Id;
            var channelId  = socketMessage.Channel.Id.ToString();
            var messageId = socketMessage.Id.ToString();
            var message = socketMessage.Content;

            var channel = Client.GetChannel(Convert.ToUInt64(channelId));
            var socketChannel = (ISocketMessageChannel)channel;

            //Do Something and send a response here.
            socketChannel.SendMessageAsync("YOUR RESPONSE");
        }
    });
}
...