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

我的建议是检查这个消息。附件!= 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

var image = message.Attachments.Where(x => x.Filename.EndsWith("*.png") ...);

这段代码将是一个很好的解决方案,但如果你想检查这是真实的图像,那么。

首先下载图片。

第二次检查幻数

https://en.wikipedia.org/wiki/List_of_file_signatures这个维基百科链接有一个幻数列表,例如,MZ表示PE文件。

如果文件的字节不是以MZ开头的,windows将拒绝执行。

最新更新