2017-08-31 84 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