Tạo bot Discord trên .NET Core với việc triển khai lên máy chủ VPS

Tạo bot Discord trên .NET Core với việc triển khai lên máy chủ VPS

Xin chào Khabrovites!

Hôm nay bạn sẽ thấy một bài viết hướng dẫn bạn cách tạo bot bằng C# trên .NET Core và cách chạy nó trên máy chủ từ xa.

Bài viết sẽ bao gồm nền tảng, giai đoạn chuẩn bị, viết logic và chuyển bot sang máy chủ từ xa.

Tôi hy vọng bài viết này sẽ giúp nhiều người mới bắt đầu.

thời tiền sử

Mọi chuyện bắt đầu vào một đêm mùa thu mất ngủ mà tôi dành cho máy chủ Discord. Vì tôi mới tham gia cùng anh ấy, tôi bắt đầu nghiên cứu về anh ấy từ đầu đến cuối. Sau khi tìm thấy kênh văn bản "Vị trí tuyển dụng", tôi bắt đầu quan tâm, mở nó ra và tìm thấy trong số những lời đề nghị mà tôi không quan tâm, đó là:

"Lập trình viên (nhà phát triển bot)
Yêu cầu:

  • kiến thức về ngôn ngữ lập trình;
  • năng lực tự học.

Пожелания:

  • khả năng hiểu mã của người khác;
  • kiến thức về chức năng DISCORD.

Nhiệm vụ:

  • phát triển bot;
  • hỗ trợ và bảo trì bot.

Lợi ích của bạn:

  • Cơ hội để hỗ trợ và ảnh hưởng đến dự án mà bạn thích;
  • Tích lũy kinh nghiệm làm việc theo nhóm;
  • Cơ hội thể hiện và cải thiện các kỹ năng hiện có.


Điều này ngay lập tức khiến tôi quan tâm. Vâng, họ đã không trả tiền cho công việc này, nhưng họ không yêu cầu bất kỳ nghĩa vụ nào từ bạn và điều đó sẽ không thừa trong danh mục đầu tư. Do đó, tôi đã viết thư cho quản trị viên máy chủ và anh ấy yêu cầu tôi viết một bot sẽ hiển thị số liệu thống kê của người chơi trong World of Tanks.

Giai đoạn chuẩn bị

Tạo bot Discord trên .NET Core với việc triển khai lên máy chủ VPS
Loại bỏ
Trước khi bắt đầu viết bot, chúng ta cần tạo nó cho Discord. Bạn cần:

  1. Đăng nhập vào tài khoản Discord по ссылке
  2. Trong tab "Ứng dụng", nhấp vào nút "Ứng dụng mới" và đặt tên cho bot
  3. Nhận mã thông báo bot bằng cách đăng nhập vào bot của bạn và tìm tab “Bot” trong danh sách “Cài đặt”
  4. Lưu mã thông báo ở đâu đó

Wargaming

Ngoài ra, bạn cần tạo một ứng dụng trong Wargaming để có quyền truy cập vào Wargaming API. Ở đây cũng vậy, mọi thứ đều đơn giản:

  1. Đăng nhập vào tài khoản Wargaming của bạn bằng liên kết này
  2. Chúng tôi đi đến "Ứng dụng của tôi" và nhấp vào nút "Thêm ứng dụng mới", đặt tên của ứng dụng và chọn loại ứng dụng
  3. Lưu ID ứng dụng

Phần mềm

Đã có quyền tự do lựa chọn. Ai đó sử dụng Visual Studio, ai đó Rider, ai đó nói chung là mạnh mẽ và viết mã bằng Vim (xét cho cùng, các lập trình viên thực sự chỉ sử dụng bàn phím, phải không?). Tuy nhiên, để không triển khai API Discord, bạn có thể sử dụng thư viện C# không chính thức “DSharpPlus”. Bạn có thể cài đặt nó từ NuGet hoặc bằng cách tự xây dựng các nguồn từ kho lưu trữ.

Dành cho những ai chưa biết hoặc đã quên cách cài đặt ứng dụng từ NuGet.Hướng dẫn cho Visual Studio

  1. Chuyển đến tab Dự án - Quản lý Gói NuGet;
  2. Nhấp vào đánh giá và trong trường tìm kiếm, nhập “DSharpPlus”;
  3. Chọn và cài đặt khung;
  4. LỢI NHUẬN!

Giai đoạn chuẩn bị đã kết thúc, bạn có thể tiến hành viết bot.

Viết logic

Tạo bot Discord trên .NET Core với việc triển khai lên máy chủ VPS

Chúng tôi sẽ không xem xét toàn bộ logic của ứng dụng, tôi sẽ chỉ trình bày cách làm việc với việc bot chặn tin nhắn và cách làm việc với API Wargaming.

Làm việc với bot Discord diễn ra thông qua nhiệm vụ không đồng bộ tĩnh MainTask(string[] args);
Để gọi chức năng này, trong Main bạn cần đăng ký

MainTask(args).ConfigureAwait(false).GetAwaiter().GetResult();

Tiếp theo, bạn cần khởi tạo bot của mình:

discord = new DiscordClient(new DiscordConfiguration
{
    Token = token,
    TokenType = TokenType.Bot,
    UseInternalLogHandler = true,
    LogLevel = LogLevel.Debug
});

Trong đó mã thông báo là mã thông báo bot của bạn.
Sau đó, thông qua lambda, chúng tôi viết các lệnh cần thiết mà bot sẽ thực thi:

discord.MessageCreated += async e =>
{
    string message = e.Message.Content;
    if (message.StartsWith("&"))
    {
        await e.Message.RespondAsync(“Hello, ” + e.Author.Username);
    }
};

Trường hợp e.Author.Username đang lấy biệt hiệu của người dùng.

Bằng cách này, khi bạn gửi bất kỳ tin nhắn nào bắt đầu bằng &, bot sẽ chào bạn.

Khi kết thúc chức năng này, bạn phải viết await discord.ConnectAsync(); và chờ đợi Task.Delay(-1);

Điều này sẽ cho phép bạn thực thi các lệnh trong nền mà không chiếm luồng chính.

Bây giờ chúng ta cần xử lý API Wargaming. Mọi thứ ở đây đều đơn giản - viết các yêu cầu CURL, nhận phản hồi dưới dạng chuỗi JSON, lấy dữ liệu cần thiết từ đó và thực hiện các thao tác trên chúng.

Một ví dụ về làm việc với WargamingAPI

public Player FindPlayer(string searchNickname)
        {
            //https://api.worldoftanks.ru/wot/account/list/?application_id=y0ur_a@@_id_h3r3search=nickname
            urlRequest = resourceMan.GetString("url_find_player") + appID + "&search=" + searchNickname;
            Player player = null;
            string resultResponse = GetResponse(urlRequest);
            dynamic parsed = JsonConvert.DeserializeObject(resultResponse);

            string status = parsed.status;
            if (status == "ok")
            {
                int count = parsed.meta.count;
                if (count > 0)
                {
                    player = new Player
                    {
                        Nickname = parsed.data[0].nickname,
                        Id = parsed.data[0].account_id
                    };
                }
                else
                {
                    throw new PlayerNotFound("Игрок не найден");
                }
            }
            else
            {
                string error = parsed.error.message;
                if (error == "NOT_ENOUGH_SEARCH_LENGTH")
                {
                    throw new PlayerNotFound("Минимум три символа требуется");
                }
                else if (error == "INVALID_SEARCH")
                {
                    throw new PlayerNotFound("Неверный поиск");
                }
                else if (error == "SEARCH_NOT_SPECIFIED")
                {
                    throw new PlayerNotFound("Пустой никнейм");
                }
                else
                {
                    throw new Exception("Something went wrong.");
                }
            }

            return player;
        }

Chú ý! Tuyệt đối không nên lưu trữ tất cả các mã thông báo và ID ứng dụng ở dạng văn bản rõ ràng! Ở mức tối thiểu, Discord cấm các mã thông báo như vậy khi chúng xâm nhập vào mạng toàn cầu và ở mức tối đa, bot bắt đầu được sử dụng bởi những kẻ tấn công.

Triển khai lên VPS - máy chủ

Tạo bot Discord trên .NET Core với việc triển khai lên máy chủ VPS

Khi bạn đã hoàn tất với bot, nó cần được lưu trữ trên một máy chủ hoạt động liên tục 24/7. Điều này là do khi ứng dụng của bạn đang chạy, bot cũng đang chạy. Ngay sau khi bạn tắt ứng dụng, bot của bạn cũng sẽ ngủ.

Nhiều máy chủ VPS tồn tại trên thế giới này, cả trên Windows và Linux, tuy nhiên, trong hầu hết các trường hợp, lưu trữ trên Linux rẻ hơn nhiều.

Trên máy chủ Discord, tôi được khuyên dùng vscale.io và tôi đã ngay lập tức tạo một máy chủ ảo trên Ubuntu trên đó và tải bot lên. Tôi sẽ không mô tả cách thức hoạt động của trang web này mà sẽ đi thẳng vào phần cài đặt bot.

Trước hết, bạn cần cài đặt phần mềm cần thiết sẽ chạy bot của chúng tôi được viết bằng .NET Core. Làm thế nào để làm điều đó được mô tả ở đây.

Tiếp theo, bạn cần tải bot lên dịch vụ Git, chẳng hạn như GitHub và tương tự, đồng thời sao chép bot vào máy chủ VPS hoặc tải xuống bot của bạn theo những cách khác. Xin lưu ý rằng bạn sẽ chỉ có bảng điều khiển, không có GUI. Ở tất cả.

Sau khi bạn đã tải xuống bot của mình, bạn cần chạy nó. Đối với điều này, bạn cần:

  • Khôi phục tất cả các phụ thuộc: khôi phục dotnet
  • Xây dựng ứng dụng: dotnet build name_project.sln -c Release
  • Chuyển đến DLL đã xây dựng;
  • tên dotnet_of_file.dll

Chúc mừng! Bot của bạn đang chạy. Tuy nhiên, thật không may, bot chiếm bảng điều khiển và không dễ để thoát khỏi máy chủ VPS. Ngoài ra, trong trường hợp khởi động lại máy chủ, bạn sẽ phải khởi động bot theo một cách mới. Có một vài cách thoát khỏi tình huống này. Tất cả chúng đều liên quan đến việc khởi chạy khi khởi động máy chủ:

  • Thêm tập lệnh chạy vào /etc/init.d
  • Tạo một dịch vụ sẽ chạy khi khởi động.

Tôi không thấy điểm nào trong việc tìm hiểu chi tiết về chúng, mọi thứ đều được mô tả đầy đủ chi tiết trên Internet.

Những phát hiện

Tôi rất vui vì tôi đã nhận nhiệm vụ này. Đây là trải nghiệm phát triển bot đầu tiên của tôi và tôi rất vui vì đã có kiến ​​thức mới về C# và làm việc với Linux.

Liên kết đến máy chủ Discord. Dành cho những ai chơi game Wargaming.
Liên kết đến kho chứa bot Discord.
Liên kết đến kho lưu trữ DSharpPlus.
Cảm ơn bạn!

Nguồn: www.habr.com

Thêm một lời nhận xét