2017-08-31 86 views
1

我想这代码,我已经从discord.net GitHub的页面复制这一工作完全正常:Discord.NET C#的messageReceived获取调用次数太多

using Discord; 
using Discord.WebSocket; 
using System; 
using System.Threading.Tasks; 


namespace Adivisor 
{ 
public class Program 
{ 
    private DiscordSocketClient _client; 
    public static void Main(string[] args) => new Program().MainAsync().GetAwaiter().GetResult(); 

    public async Task MainAsync() 
    { 
     _client = new DiscordSocketClient(); 
     _client.Log += Log; 
     _client.MessageReceived += MessageReceived; 

     string token = ":P"; 

     await _client.LoginAsync(TokenType.Bot, token); 
     await _client.StartAsync(); 
     await Task.Delay(-1); 

    } 

    private async Task MessageReceived(SocketMessage message) 
    { 
     if (message.Content == "!hi") 
     { 
      await message.Channel.SendMessageAsync("Hello!"); 
     } 
    } 

    private Task Log(LogMessage msg) 
    { 
     Console.WriteLine(msg.ToString()); 
     return Task.CompletedTask; 
    } 

    } 
} 

后,我上了一个小编辑现在的messageReceived它看起来像这样:

private async Task MessageReceived(SocketMessage message) 
{ 
    await message.Channel.SendMessageAsync("Hello!"); 
} 

pratically我只是删除了,如果,但有一个巨大的differnce,好像没有如果的messageReceived被称为永远...

+1

这是因为“你好!”触发'MessageReceived',从而导致无限循环。 – Xiaoy312

+0

谢谢你现在一切都有道理:D – Lyner

+0

如果没有错误通常我应该从下面的列表中选择一个asnwer,但你没有回答,但一个评论,所以...是这样离开这个问题是好的吗? – Lyner

回答

1

方式类似于W帽子Xiaoy312表示,只要你的机器人发送一条消息,它也会收到它自己的消息。
(这同样也适用于自己的用户帐户!试着做聊天的@everyone平安,你会看到它,即使它是你是谁寄的被突出显示。)

你可以让你的机器人忽略其他机器人通过这样的信息:

//Ignores all bots messages 
//Where message is your received SocketMessage 
if (message.Author.IsBot) { return; } 

或者你可以把它检查消息的作者的ID相当于机器人的ID。您可以检查文档here