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