|
- 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!");
- }
- }
- }
|