Saya telah melihat banyak contoh cara menjalankan Discord.NET Bot tetapi semua contoh itu menunjukkan cara menjalankan 1 bot per 1 proyek aplikasi konsol atau satu bot yang dipecah dengan server, jadi apakah perpustakaan ini dirancang hanya untuk pendekatan 1<-->1 karena saya gergaji juga singleton digunakan untuk menghubungkan bagian? Apakah mungkin menjalankan banyak bot dari satu basis kode? Saya memerlukan ini untuk melacak bot/koneksi dan melihat status di aplikasi web tetapi mungkin keputusan yang buruk jika saya menggunakan beberapa pendekatan aplikasi konsol.

0
DevUnitk 28 Mei 2020, 11:04

1 menjawab

Jawaban Terbaik

Anda mungkin harus menggunakan objek dan kelas untuk setiap bot perselisihan, tetapi saya ingin memberi Anda gambaran tentang bagaimana Anda bisa mencapai efek seperti itu. Saya mungkin juga akan menggunakan sistem logging yang lebih baik (mungkin beberapa perpustakaan logging?). Tetapi jika saya jadi Anda, saya mungkin akan berpikir tentang menggunakan docker dan docker-compose?

Bersulang

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

namespace temp
{
    public class Program
    {
        public static async Task Bot1(Func<LogMessage, Task> log, CancellationToken cancellationToken)
        {
            var client = new DiscordSocketClient();
            client.Log += log;
            await client.LoginAsync(TokenType.Bot, "token1");
            await client.StartAsync();
            await Task.Delay(-1, cancellationToken);
        }
        public static async Task Bot2(Func<LogMessage, Task> log, CancellationToken cancellationToken)
        {
            var client = new DiscordSocketClient();
            client.Log += log;
            await client.LoginAsync(TokenType.Bot, "token2");
            await client.StartAsync();
            await Task.Delay(-1, cancellationToken);
        }
        public static void Main()
        {
            var cancellationToken = new CancellationTokenSource();
            Console.CancelKeyPress += (sender, args) =>
            {
                cancellationToken.Cancel();
                args.Cancel = true;
            };
            Task.WhenAll(new Task[]
            {
                Bot1(Log, cancellationToken.Token),
                Bot2(Log, cancellationToken.Token)
            });
        }

        private static async Task Log(LogMessage message)
        {
            Console.WriteLine(message);
        }
    }
}
0
Stanisław Nieradko 29 Mei 2020, 19:05