我有一个问题,我正在寻找我们的不和谐机器人只寻找收到的图像,忽略任何键入的文本。从我读过的指南中,我还没有遇到任何不需要命令的。
我试图使用一个命令没有命令的字符串,但它不构建,因为它不包含一个参数。
有没有人有任何想法,我可以只听一个图像?
下面是我的代码示例:
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将拒绝执行。