Я никогда не использовал Discord.NET... Таким образом, я думаю, что повторю то, что вы уже знаете (я оставлю это, потому что я не знаю, насколько это разумные предположения, и насколько это может помочь другим).
Из того, что я нашел в документации и репозиториях, вы можете создать клиент:
var client = new DiscordSocketClient();
Затем подключитесь к MessageReceived
(вы также хотите вызвать LoginAsync
и StartAsync
).
client.MessageReceived += MessageReceived;
Task MessageReceived(SocketMessage message)
{
// ...
}
Затем вы можете прочитать SocketMessage.MentionedUsers
(которое вы упомянули, вы уже умеете это делать), которое будет собранием упомянутых пользователей (SocketUser
). Я думаю, вы будете искать его и найдете, пересекается ли он с вашим списком... если вы узнаете их по имени и у вас есть метод UsersWithNotes
, который возвращает IEnumerable<string>
с именами, которые вы хотите сопоставить, вы можете сделать что-то вроде этого:
Task MessageReceived(SocketMessage message)
{
// ...
var foundUsers = message.MentionedUsers.Select(u => u.Username).Intersect(UsersWithNotes());
// ...
}
Глядя на примеры в исходном коде, кажется, что SocketMessage получает все сообщения, а затем вы переходите к фильтрации команд. Пример:
async Task HandleCommandAsync(SocketMessage messageParam)
{
// Filter out system messages
var message = messageParam as SocketUserMessage;
if (message == null)
{
return;
}
// Filter out non commands
int argPos = 0;
if (!(message.HasCharPrefix('!', ref argPos) ||
message.HasMentionPrefix(_client.CurrentUser, ref argPos)) ||
message.Author.IsBot)
return;
//...
}
Что ж, если вам нужно читать SocketMessage.MentionedUsers
во всех сообщениях, то делайте это независимо от этих проверок.
Примечание. По-видимому, ваш бот также будет получать сообщения, которые он отправляет, поэтому вы можете по-прежнему отфильтровывать сообщения от себя. Кроме того, вы можете получить текст сообщения с message.Content
, что означает, что вы можете разобрать его, как хотите.
См. также: Как заставить мой Discord C# отвечать на упоминания?, который показывает, как обращаться с при упоминании вашего бота.
Я ничего не проверял из того, что говорю здесь. Я никогда не использовал Discord.NET и до сих пор не использовал его. Принимайте с недоверием.
person
Theraot
schedule
03.01.2019