PriestFromRL
@PriestFromRL

Как Discord.NET обеспечивает связь между командами и атрибутами?

Решил создать дискорд бота, но я не могу успокоится из-за своего непонимания работы связи наследуемого класса с классом-родителем ModulBase<SocketCommandContext>

Проясню:
Для обработки команд пользователя дискорд-бота, достаточно создать класс, который наследуется от ModulBase<SocketCommandContext>. В классе необходимо создать метод, который будет вызываться при вводе пользователем команды. И чтобы этот метод вызывался при определенной команде, к нему достаточно добавить атрибут [Command("текст команды")], как это работает?
Мне непонятен именно процесс, по которому класс-родитель каким-то образом обращаясь к атрибуту вызывает метод, к которому он принадлежит. Как я понимаю это процесс рефлексии, но разве не у объекта\свойства или ч-либо другого сначала запрашивается его атрибут, а потом значение этого атрибута?

Пример

public class CommandHandler : ModuleBase<SocketCommandContext>
{
    
    [Command("echo", true)]
    private async Task Echo()
    {
        _usersList.Add(Context.User);

        var message = Context.Message.Content;
        message = message.Remove(0, 5);

        await ReplyAsync($"{message}");
    }
}



Было бы неплохо если бы мне разъяснили как это работает или привели статью с примерами
  • Вопрос задан
  • 132 просмотра
Решения вопроса 1
При помощи System.Reflection ты можешь узнать, какие классы и методы сейчас загружены в память, и прочитать, какие у них стоят атрибуты, а также содержимое этих атрибутов, а потом динамически вызвать нужный метод с нужными параметрами.

https://metanit.com/sharp/tutorial/14.1.php
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы