Я никогда не использовал 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 и до сих пор не использовал его. Возьмите с собой крупицу соли.