Как создать Discord бота на Google Apps Script?

Что такое Google Apps Script и почему он подходит для Discord ботов?

Google Apps Script (GAS) — это облачная платформа разработки, позволяющая автоматизировать задачи и интегрировать различные сервисы Google, а также внешние API. Почему GAS подходит для создания Discord ботов?

Простота: GAS основан на JavaScript, что делает его относительно простым в освоении.

Интеграция: Легко интегрируется с сервисами Google Workspace (Sheets, Docs, Calendar и т.д.).

Бесплатность: Для базовых задач GAS предоставляется бесплатно.

Облачная платформа: Не требует локальной установки и настройки окружения.

Преимущества и недостатки использования Google Apps Script для ботов

Преимущества:

Быстрая разработка: Можно быстро создать прототип бота.

Интеграция с Google: Легко интегрировать данные из Google Sheets для, например, автоматической публикации отчетов о рекламных кампаниях в Discord канал.

Не требует сервера: Бот работает в облаке Google.

Недостатки:

Ограничения: Существуют лимиты на время выполнения скриптов и количество запросов к API.

Производительность: GAS может быть медленнее, чем традиционные языки программирования.

Отладка: Отладка кода может быть затруднена из-за облачной среды.

Необходимые инструменты и аккаунты: Google Workspace и Discord Developer Portal

Для работы потребуется:

Аккаунт Google Workspace.

Аккаунт Discord.

Доступ к Discord Developer Portal.

Настройка окружения Google Apps Script и Discord Developer Portal

Создание нового проекта Google Apps Script

Откройте script.google.com.

Создайте новый проект (New project).

Дайте проекту понятное имя (например, "Discord Bot").

Создание Discord бота в Developer Portal и получение токена

Перейдите в Discord Developer Portal.

Создайте новое приложение (New Application).

Перейдите в раздел "Bot" и нажмите "Add Bot".

Скопируйте токен бота (Bot -> Token). Важно: храните токен в безопасном месте и не раскрывайте его публично!.

Включите Presence Intent, Server Members Intent, и Message Content Intent (если необходимо) в разделе Privileged Gateway Intents.

Настройка прав доступа бота (scopes) в Discord

В разделе "OAuth2" -> "URL Generator" выберите права доступа (scopes), необходимые боту (например, bot, applications.commands).

Сгенерируйте ссылку и пригласите бота на свой Discord сервер.

Написание кода бота на Google Apps Script

Получение токена Discord бота и его хранение

Рекомендуется хранить токен в Properties Service для безопасности:

/**
 * Сохраняет токен Discord бота в Properties Service.
 * @param {string} token Токен Discord бота.
 */
function setDiscordToken(token: string): void {
  PropertiesService.getScriptProperties().setProperty('DISCORD_TOKEN', token);
}

/**
 * Возвращает токен Discord бота из Properties Service.
 * @returns {string | null} Токен Discord бота или null, если токен не найден.
 */
function getDiscordToken(): string | null {
  return PropertiesService.getScriptProperties().getProperty('DISCORD_TOKEN');
}

// Пример использования:
// setDiscordToken('YOUR_DISCORD_BOT_TOKEN');
const DISCORD_TOKEN = getDiscordToken();
if (!DISCORD_TOKEN) {
  Logger.log('Discord token not found. Please set it in Properties Service.');
  return;
}
Реклама

Реализация базовых команд бота (например, !ping)

/**
 * Обрабатывает команду ping и отправляет ответ в Discord.
 */
function handlePingCommand(): void {
  const discordWebhookUrl: string | null = PropertiesService.getScriptProperties().getProperty('DISCORD_WEBHOOK_URL');
  if (!discordWebhookUrl) {
    Logger.log('Discord webhook URL not found. Please set it in Properties Service.');
    return;
  }

  const payload = {
    content: 'Pong!'
  };

  const options: GoogleAppsScript.URL_Fetch.URLFetchRequestOptions = {
    method: 'post',
    contentType: 'application/json',
    payload: JSON.stringify(payload)
  };

  try {
    UrlFetchApp.fetch(discordWebhookUrl, options);
  } catch (e) {
    Logger.log('Error sending message to Discord: ' + e);
  }
}

Отправка сообщений в Discord каналы

Используйте Webhooks для отправки сообщений. Необходимо создать Webhook в нужном канале Discord и сохранить URL в Properties Service Google Apps Script.

/**
 * Отправляет сообщение в Discord канал через Webhook.
 * @param {string} message Сообщение для отправки.
 */
function sendMessageToDiscord(message: string): void {
  const discordWebhookUrl: string | null = PropertiesService.getScriptProperties().getProperty('DISCORD_WEBHOOK_URL');
  if (!discordWebhookUrl) {
    Logger.log('Discord webhook URL not found. Please set it in Properties Service.');
    return;
  }

  const payload = {
    content: message
  };

  const options: GoogleAppsScript.URL_Fetch.URLFetchRequestOptions = {
    method: 'post',
    contentType: 'application/json',
    payload: JSON.stringify(payload)
  };

  try {
    const response = UrlFetchApp.fetch(discordWebhookUrl, options);
    Logger.log(response.getContentText());
  } catch (e) {
    Logger.log('Error sending message to Discord: ' + e);
  }
}

// Пример использования:
// sendMessageToDiscord('Привет из Google Apps Script!');

Обработка событий (events) Discord (например, получение новых сообщений)

GAS не поддерживает прямую обработку событий Discord в реальном времени. Реализуется через периодический опрос API Discord (не рекомендуется из-за ограничений API и нагрузки) или, что предпочтительнее, через промежуточный сервер (например, используя Google Cloud Functions), который будет принимать события от Discord и передавать их в GAS.

Интеграция Google Apps Script с Discord API

Использование UrlFetchApp для отправки запросов к Discord API

UrlFetchApp – это сервис GAS, предназначенный для выполнения HTTP-запросов.

const url = 'https://discord.com/api/v10/channels/YOUR_CHANNEL_ID/messages';
const headers = {
  'Authorization': 'Bot ' + DISCORD_TOKEN
};
const options: GoogleAppsScript.URL_Fetch.URLFetchRequestOptions = {
  'method': 'get',
  'headers': headers
};

try {
  const response = UrlFetchApp.fetch(url, options);
  const json = JSON.parse(response.getContentText());
  Logger.log(json);
} catch (e) {
  Logger.log('Error fetching data from Discord API: ' + e);
}

Обработка ответов от Discord API (JSON)

Ответы от Discord API приходят в формате JSON. Используйте JSON.parse() для обработки:

const responseText = '{"key": "value"}';
const jsonResponse = JSON.parse(responseText);
Logger.log(jsonResponse.key); // Выведет

Добавить комментарий