Слушайте только изображение в discord.net

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

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

У кого-нибудь есть идеи, как я могу просто слушать только изображение?

Ниже приведен пример моего кода.

    private async Task _client_MessageReceived(SocketMessage arg)
    {
        var message = arg as SocketUserMessage;
        var context = new SocketCommandContext(_client, message);
        if (message.Author.IsBot) return;

        int argPos = 0;
            if (message.HasStringPrefix("!", ref argPos) || message.Attachments.Count > 0)
            {
                var result = await _commands.ExecuteAsync(context, argPos, _services);
                
                if (!result.IsSuccess) Console.WriteLine(result.ErrorReason);
            }
            else
                await message.DeleteAsync();
    }

        [Command("")]
    public async Task Photo()
    {
        var attachments = Context.Message.Attachments;

        WebClient myWebClient = new WebClient();

        string file = attachments.ElementAt(0).Filename;
        string url = attachments.ElementAt(0).Url;

        myWebClient.DownloadFile(url, @"mydirect");

        _ = Task.Run(async () =>
        {
            AWS.AWS.Get_kv_map(@"mydirect");
        });
    }

person Brian Elliott    schedule 14.02.2021    source источник
comment
Вам не нужны команды, чтобы что-то делать. Просто поместите свою логику в обработчик события получения сообщения.   -  person Anu6is    schedule 15.02.2021
comment
Я не думаю, что я в состоянии сделать это? Я хотел бы по-прежнему иметь асинхронную задачу и хотел бы попробовать иметь код в одном и том же месте.   -  person Brian Elliott    schedule 15.02.2021
comment
Не понимаю, почему какая-то из этих причин вас останавливает. Метод получения сообщения, который у вас есть в настоящее время, является асинхронным, я не уверен, что другой код, на который вы ссылаетесь, возможно, не будет в том же месте. Просто удалите логику из вашего текущего обработчика сообщений и поместите туда логику команды (конечно, удалив любые ссылки на контекст).   -  person Anu6is    schedule 15.02.2021


Ответы (1)


мое предложение состоит в том, чтобы проверить, если message.Attachments != 0 ==› сделайте свое дело, с этим вы можете проверить, есть ли на нем какие-либо вложения, и после этого вы можете проверить, заканчивается ли оно на .jpg или .png или около того .

пример:

if(message.Attachments.Count != 0){
var image attachements = message.Attachments.Where(x => 
x.Filename.EndsWith(".jpg") || x.Filename.EndsWith(".png") || 
x.Filename.EndsWith(".gif")); // or what you want as "image"

if(image.Any()){
// do your stuff from your method Photo() here or just call here your method your decision
}else{
// ignore or whatever you want to do it with it
}

Я надеюсь, что это помогло и удачи в вашем проекте: D

person Just4Gamer    schedule 19.02.2021
comment
Как насчет переименовать virus.exe в virus.jpg? ваш код думает, что это изображение! - person Saeed Esmaeelinejad; 24.02.2021