Reputation: 45
i tried this code which i've copied from the github page of discord.net this one works perfectly fine:
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;
}
}
}
after i made a little editing on MessageReceived now it looks like this:
private async Task MessageReceived(SocketMessage message)
{
await message.Channel.SendMessageAsync("Hello!");
}
pratically i just removed the if, but there is a huge differnce, seems like the without the if MessageReceived gets called forever...
Upvotes: 1
Views: 4102
Reputation: 4056
Like what Xiaoy312 stated, whenever your bot send a message, it also receives it's own message.
(The same also applies for your own user account! Try doing an @everyone
ping in chat and you will see it being highlighted even though it was you who sent it.)
You can make your bot ignore it other bots messages by doing this:
//Ignores all bots messages
//Where message is your received SocketMessage
if (message.Author.IsBot) { return; }
Or you can make it check if the message's author's ID equals to the bot's ID. You can check the documentation here.
Upvotes: 2