78 lines
2.6 KiB
C#
78 lines
2.6 KiB
C#
using System;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using Discord;
|
|
using Discord.WebSocket;
|
|
|
|
namespace _01_basic_ping_bot
|
|
{
|
|
// This is a minimal, bare-bones example of using Discord.Net
|
|
//
|
|
// If writing a bot with commands, we recommend using the Discord.Net.Commands
|
|
// framework, rather than handling commands yourself, like we do in this sample.
|
|
//
|
|
// You can find samples of using the command framework:
|
|
// - Here, under the 02_commands_framework sample
|
|
// - https://github.com/foxbot/DiscordBotBase - a bare-bones bot template
|
|
// - https://github.com/foxbot/patek - a more feature-filled bot, utilizing more aspects of the library
|
|
class Program
|
|
{
|
|
private readonly DiscordSocketClient _client;
|
|
|
|
// Discord.Net heavily utilizes TAP for async, so we create
|
|
// an asynchronous context from the beginning.
|
|
static void Main(string[] args)
|
|
{
|
|
new Program().MainAsync().GetAwaiter().GetResult();
|
|
}
|
|
|
|
public Program()
|
|
{
|
|
// It is recommended to Dispose of a client when you are finished
|
|
// using it, at the end of your app's lifetime.
|
|
_client = new DiscordSocketClient();
|
|
|
|
_client.Log += LogAsync;
|
|
_client.Ready += ReadyAsync;
|
|
_client.MessageReceived += MessageReceivedAsync;
|
|
}
|
|
|
|
public async Task MainAsync()
|
|
{
|
|
// Tokens should be considered secret data, and never hard-coded.
|
|
await _client.LoginAsync(TokenType.Bot, Environment.GetEnvironmentVariable("token"));
|
|
await _client.StartAsync();
|
|
|
|
// Block the program until it is closed.
|
|
await Task.Delay(Timeout.Infinite);
|
|
}
|
|
|
|
private Task LogAsync(LogMessage log)
|
|
{
|
|
Console.WriteLine(log.ToString());
|
|
return Task.CompletedTask;
|
|
}
|
|
|
|
// The Ready event indicates that the client has opened a
|
|
// connection and it is now safe to access the cache.
|
|
private Task ReadyAsync()
|
|
{
|
|
Console.WriteLine($"{_client.CurrentUser} is connected!");
|
|
|
|
return Task.CompletedTask;
|
|
}
|
|
|
|
// This is not the recommended way to write a bot - consider
|
|
// reading over the Commands Framework sample.
|
|
private async Task MessageReceivedAsync(SocketMessage message)
|
|
{
|
|
// The bot should never respond to itself.
|
|
if (message.Author.Id == _client.CurrentUser.Id)
|
|
return;
|
|
|
|
if (message.Content == "!ping")
|
|
await message.Channel.SendMessageAsync("pong!");
|
|
}
|
|
}
|
|
}
|