ボットホスティング入門
ボットホスティングへようこそ!このサービスは、あなたのカスタムコードボットを24時間365日、あなたのコンピュータがオフの時でも実行し続けるために設計されています。ボットとは、DiscordやTelegramのようなプラットフォーム上のタスクを自動化するプログラムのことです。当社のサービスでボットをホスティングすることで、ボットは常にオンラインでユーザーに利用可能な状態になります。
当社のボットホスティングサービスは、指定されたプラットフォーム(例:Discord APIに接続するDiscordボット)でボットを実行することのみを目的としています。このサービスを他の目的(ウェブサイト、ゲームサーバー、悪意のあるアプリケーションのホスティングなど)で使用しようとする試みは、即時停止の対象となります。
無料プランには特定のリソース制限(例:256MB RAM、25% CPU)が適用されます。ボットが非常に大きくなったり、何千ものサーバーに参加したりする場合は、より多くのパワーを得るために有料プランへのアップグレードが必要になることがあります。
ボットトークンの取得
「トークン」とは、あなたのコードがボットアカウントにログインするために使用する、ユニークで秘密のパスワードです。これはあなたが必要とする最も重要な情報です。トークンは絶対に誰とも共有してはいけません。
Discordボットトークン
アプリケーションの作成
Discord Developer Portalにアクセスし、「New Application」をクリックします。名前を付けて「Create」をクリックしてください。
ボットユーザーを作成し、トークンを取得
アプリケーションの設定で、「Bot」タブに移動します。「Add Bot」をクリックします。ボットのユーザー名の下にある「Reset Token」をクリックして、トークンを表示・コピーします。
Gateway Intentを有効にする
「Intent」は、ボットが特定の種類の情報を受け取るために必要な権限です。同じ「Bot」ページで、下にスクロールして3つの「Privileged Gateway Intents」をすべて有効にします。これらがないと、ボットはサーバーに誰がいるか、新しいメンバーがいつ参加したか、メッセージの内容を読むことができません。
Telegramボットトークン
- BotFatherを見つける: Telegramアプリを開き、認証済みユーザー
@BotFatherを検索します。 - 新しいボットを作成する: BotFatherとのチャットを開始し、
/newbotコマンドを送信します。画面の指示に従ってください。 - トークンをコピーする: 完了すると、BotFatherがAPIトークンを提供します。これをコピーして安全な場所に保管してください。
ボットのためのPterodactyl環境
当社のパネルは、ボットを管理するための強力で隔離された環境を提供します。ここでは、主要な概念を簡単に説明します。
主要な起動変数
「Startup」タブは、サーバーを設定する場所です。ボットにとって、これらが最も重要な変数です:
BOT_TOKEN: 秘密のボットトークンを貼り付ける安全な場所です。BOT_JS_FILE/BOT_PY_FILE: メインスクリプトファイルの名前です(例:index.jsやbot.py)。NODE_VERSION(JavaScriptボット用): 使用するNode.jsのバージョンを指定できます(例:16,18,20)。これは、コードやライブラリとの互換性を確保するために非常に重要です。
環境変数:安全な方法
コードに直接トークンを貼り付けるのは、パスワードを付箋に書くようなものです。環境変数は安全なロッカーのようなものです。「Startup」タブのBOT_TOKEN変数にトークンを置き、コードは他の誰にも見られることなくロッカーの中から値を要求できます。これが秘密情報を扱うプロフェッショナルで安全な方法です。
Discord.js (JavaScript) ガイド
このガイドでは、人気のdiscord.jsライブラリを使用してJavaScriptで書かれたDiscordボットをデプロイする方法を説明します。
1. `package.json`ファイル:ボットの買い物リスト
このファイルは不可欠です。どのNode.jsライブラリ(依存関係)をインストールするかをサーバーに伝えます。これは`npm`(Node Package Manager)の買い物リストのようなものだと考えてください。PCのプロジェクトフォルダでnpm init -yを実行して作成できます。"start"スクリプトを含み、依存関係にdiscord.jsがリストされている必要があります。
2. コード例:シンプルなPingボット
コードは環境からトークンを読み取り、機能するためにDiscordから正しい「Intent」を要求する必要があります。
// index.js
const { Client, GatewayIntentBits } = require('discord.js');
const client = new Client({
intents: [
GatewayIntentBits.Guilds,
GatewayIntentBits.GuildMessages,
GatewayIntentBits.MessageContent
]
});
client.on('messageCreate', message => {
if (message.author.bot) return;
if (message.content === '!ping') {
message.reply('Pong!');
}
});
const token = process.env.BOT_TOKEN;
client.login(token);
3. デプロイ手順
index.jsとpackage.jsonファイルをファイルマネージャーにアップロードします。- 「Startup」タブに移動します。トークンを
BOT_TOKEN変数に貼り付けます。BOT_JS_FILE変数がindex.jsに設定されていることを確認してください。 - サーバーを起動します。コンソールに最初に
npm installが実行され、その後ボットがオンラインになります。
4. トラブルシューティング
"Error: Cannot find module 'discord.js'": これは、package.jsonファイルがない、間違っている、またはアップロードされていないことを意味します。ファイルが存在し、dependenciesの下に`discord.js`が正しくリストされていることを確認してください。
"TypeError: Cannot read properties of null (reading 'channels')": これは典型的な「Intent」の問題です。Discord Developer PortalですべてのPrivileged Gateway Intentsを有効にしていることを確認してください。
Discord.py (Python) ガイド
このガイドでは、discord.pyやそのフォーク(py-cord, nextcord)などのライブラリを使用してPythonで書かれたDiscordボットをデプロイする方法を説明します。
1. `requirements.txt`ファイル:Pythonの買い物リスト
当社のサーバーはこのファイルを使用して、`pip`で必要なPythonパッケージをインストールします。PCで、プロジェクトのターミナルで次のコマンドを実行してこのファイルを生成します:
pip freeze > requirements.txt
2. コード例:コマンド付きの改良版Pingボット
単純な`on_message`イベントも機能しますが、スケーラブルなボットを構築する正しい方法は`commands`拡張機能を使用することです。
# bot.py
import os
import discord
from discord.ext import commands
# Intentsは権限です。message_contentはコマンドを読むために必要です。
intents = discord.Intents.default()
intents.message_content = True
bot = commands.Bot(command_prefix='!', intents=intents)
@bot.command()
async def ping(ctx):
"""Pong!と返信します"""
await ctx.send('Pong!')
# これがトークンを安全に取得する方法です
token = os.getenv("BOT_TOKEN")
bot.run(token)
3. 上級:Cogで整理する
より大きなボットの場合、コマンドを「Cog」と呼ばれる別のファイルに整理する必要があります。`cogs`という名前のフォルダを作成し、その中に`fun.py`のようなファイルを作成します:
# cogs/fun.py
from discord.ext import commands
class Fun(commands.Cog):
def __init__(self, bot):
self.bot = bot
@commands.command()
async def hello(self, ctx):
await ctx.send(f'こんにちは {ctx.author.name}さん!')
async def setup(bot):
await bot.add_cog(Fun(bot))
そして、メインの`bot.py`でこのcogをロードします:
# bot.py(cogをロードするように変更)
# ... (インポートとボットの設定は以前と同じ) ...
@bot.event
async def on_ready():
print(f'{bot.user} としてログインしました')
await bot.load_extension('cogs.fun')
token = os.getenv("BOT_TOKEN")
bot.run(token)
4. デプロイ手順
- `bot.py`、`requirements.txt`、および`cogs`フォルダをファイルマネージャーにアップロードします。
- 「Startup」タブに移動します。トークンを
BOT_TOKEN変数に貼り付けます。BOT_PY_FILE変数がbot.pyに設定されていることを確認してください。 - サーバーを起動します。コンソールに
pip install -r requirements.txtが実行され、その後ボットが起動します。
Telegramボットガイド
Telegramボットのホスティングも全く同じ原則に従います。環境変数からトークンを読み込むようにコードを準備し、依存関係ファイルを提供します。
Python Telegramボットの例
この例では、人気のpython-telegram-botライブラリを使用します。
# requirements.txt
python-telegram-bot==20.3
# main.py
import os
from telegram import Update
from telegram.ext import Application, CommandHandler, ContextTypes
async def start(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
await update.message.reply_text('ホストされたボットからこんにちは!')
def main() -> None:
token = os.getenv("BOT_TOKEN") # トークンを安全に読み込む
application = Application.builder().token(token).build()
application.add_handler(CommandHandler("start", start))
# これが常にTelegramに新しいメッセージを問い合わせます
application.run_polling()
if __name__ == "__main__":
main()
これをデプロイするには、`main.py`と`requirements.txt`をアップロードし、「Startup」タブで`BOT_TOKEN`を設定し、Pythonスクリプト名が`main.py`に設定されていることを確認します。