НОВОЕ 📢 Ограниченное стартовое предложение: скидка до 70% на первый месяц для любой игры!Посмотреть тарифы

Как запустить Discord-бота на Go

Хостинг Discord-ботовUpdated Oct 29, 20265 min read

Бот на Go собирается на вашем компьютере и загружается как одна готовая программа для Linux. На сервере ничего не компилируется, поэтому вся память вашего тарифа достаётся боту. Чтобы запустить его:

  1. Соберите бота для Linux x86-64 на своём компьютере.
  2. Смените тип: на странице Бот, в разделе Код, нажмите Изменить, что запускается рядом с полем Среда выполнения и выберите Go Bot.
  3. Загрузите программу (по умолчанию она называется bot) в Files или задайте Ссылка для скачивания (необязательно) в разделе Код.
  4. Вставьте токен на странице Бот, в разделе Discord, и нажмите Подключить.
  5. Нажмите Запустить и следите за Console.

1. Соберите программу для Linux

В папке проекта, на любом компьютере:

# macOS or Linux
GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -o bot

# Windows PowerShell
$env:GOOS="linux"; $env:GOARCH="amd64"; $env:CGO_ENABLED="0"; go build -o bot

CGO_ENABLED=0 создаёт один самодостаточный файл, который не зависит от системных библиотек сервера. В результате получается файл bot без расширения. Файл .exe или сборка для macOS на сервере не запустятся.

2. Минимальный бот на discordgo

package main

import (
	"fmt"
	"os"
	"os/signal"
	"syscall"

	"github.com/bwmarrin/discordgo"
)

func main() {
	dg, err := discordgo.New("Bot " + os.Getenv("DISCORD_TOKEN"))
	if err != nil {
		fmt.Println("error creating session:", err)
		return
	}
	dg.Identify.Intents = discordgo.IntentsGuilds
	dg.AddHandler(func(s *discordgo.Session, r *discordgo.Ready) {
		fmt.Println("Logged in as", r.User.Username)
	})
	if err := dg.Open(); err != nil {
		fmt.Println("error opening connection:", err)
		return
	}
	defer dg.Close()

	stop := make(chan os.Signal, 1)
	signal.Notify(stop, os.Interrupt, syscall.SIGTERM)
	<-stop
}

Токен берётся из DISCORD_TOKEN. Когда вы нажимаете Остановить, ваша программа получает сигнал прерывания, поэтому последние строки аккуратно закрывают соединение с Discord. Строка Logged in as переключает метку на странице Обзор на Онлайн в Discord.

3. Смените тип на Go Bot

На странице Бот, в разделе Код, нажмите Изменить, что запускается рядом с полем Среда выполнения и выберите Go Bot. На компьютере то же окно открывает метка типа вверху страницы (например, Node.js Bot). См. Как переключить бота на другой язык.

4. Положите программу на сервер

Загрузите её: в Files нажмите Загрузить и выберите bot. Загрузите рядом с ней все файлы, которые она читает. Делать её исполняемой не нужно: сервер делает это при запуске.

Или пусть сервер скачает её сам: на странице Бот, в разделе Код, в карточке Настройки, задайте Ссылка для скачивания (необязательно) как https-ссылку на вашу готовую программу, например на файл релиза GitHub, и нажмите Сохранить. Если при запуске файла программы нет, сервер скачивает его (до 500 МБ). Чтобы обновить, опубликуйте новую сборку по этой ссылке, удалите программу в Files и нажмите Запустить.

Если задана ссылка для скачивания, кнопка Запустить бота в карточке Настройка бота работает даже до появления файла: скачивание выполняется как часть запуска.

Раздел «Код» бота на Go с карточкой «Как он запускается» и карточкой «Настройки» со списком «Аргументы запуска» и «Ссылка для скачивания».

5. Проверьте настройки и запустите

  • Файл запуска (карточка Как он запускается): имя и папка программы, по умолчанию bot, например bin/mybot.
  • Аргументы запуска (необязательно) (карточка Настройки): дополнительные аргументы для вашей программы, например --debug. Символы оболочки вроде $, ;, & и > не разрешены.

Вставьте токен в разделе Discord, нажмите Подключить, затем нажмите Запустить. Консоль покажет [PlayNHost] Starting your bot, а затем вывод вашей программы.

Строки консоли, которые вы можете увидеть

СтрокаЧто делать
[PlayNHost] Your bot is not set up yet: the program bot was not found.Загрузите программу или впишите в Файл запуска её точное имя и папку.
[PlayNHost] bot is not a Linux program. Build it for Linux x86-64 (not Windows or macOS) and upload it again.Соберите программу заново с GOOS=linux GOARCH=amd64.
[PlayNHost] Downloading your program, затем [PlayNHost] The download failed. Check the download link on the Bot page, Code, Settings, then press Start.Ссылка неверная, приватная или не https. Проверьте Ссылка для скачивания (необязательно) в разделе Код, в карточке Настройки.

У ботов на Go нет источника Git и нет поля Пакеты: ваши библиотеки находятся внутри программы. Ключи и пароли хранятся в разделе Окружение и читаются через os.Getenv: Как задать переменные окружения и секреты.

Ваш бот уже у другого хостинга? Перенесите его к нам

ПОСЛЕДНИЕ БЛОГИ