Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 仅在discord.net中侦听图像_C#_Discord.net - Fatal编程技术网

C# 仅在discord.net中侦听图像

C# 仅在discord.net中侦听图像,c#,discord.net,C#,Discord.net,我有一个问题,我正在寻找我们的discord机器人,只寻找接收到的图像,而忽略任何键入的文本。 从我读过的指南中,我还没有遇到任何不需要命令的 我尝试使用字符串中没有命令的命令,但是它不生成,因为它不包含参数 有人知道我怎么能只听一张图片吗 下面是我的代码示例 private async Task _client_MessageReceived(SocketMessage arg) { var message = arg as SocketUserMessage;

我有一个问题,我正在寻找我们的discord机器人,只寻找接收到的图像,而忽略任何键入的文本。 从我读过的指南中,我还没有遇到任何不需要命令的

我尝试使用字符串中没有命令的命令,但是它不生成,因为它不包含参数

有人知道我怎么能只听一张图片吗

下面是我的代码示例

    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");
        });
    }

我的建议是检查邮件。附件!=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
}

我希望这对你的项目有帮助并祝你好运:你不需要命令来做事情。只需将您的逻辑放在MessageReceived事件处理程序中。我想我不能这样做吗?我希望仍然有一个异步任务,并希望尝试将代码放在同一个位置。我不明白为什么这些原因会阻止您。您当前使用的MessageReceived方法是异步的,我不确定您所引用的其他哪些代码也可能不在“同一位置”。只需从当前消息处理程序中删除逻辑,并将命令逻辑放在其中(当然要删除对上下文的任何引用)。如何将
virus.exe
重命名为
virus.jpg
?你的代码认为这是一个图像!