1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Qiita全国学生対抗戦Advent Calendar 2024

Day 9

友達と遊ぶ用のSpigotサーバーの便利ツールを作る #1

Last updated at Posted at 2024-11-10

最近友達とSpigotの自宅サーバーを立てて遊んでます。
そのサーバーで使える便利ツールを作って行きます。
今回はパート1です

サーバー環境

記事執筆時の環境です。

サーバー:Spigot
環境: Windows11 Home
ポート開放: SecureShareNet
主なプラグイン: DiscordSRV,WorldEdit,BlueMap,GeyserMCなど その他合計30個

便利ツール

今回作るツールでは、主にやりたいことが2つあります。
・自作DiscordBotで サーバーのアドレス、などをいちいち送らなくていいようにする。
・メンテ起動をできるようにする。(DiscordBotにメンテって言ってもらう)

ん? それくらい自分でやれって? めんどくさいから楽にしたい。

DiscordBot

今回は、discordのJavaScriptパッケージのdiscord.jsを使います。
基本的にはNode.jsでつくる。

discord.js

npm install discord.js

テスト

試しにテストで、メッセージを送って見ます。

参考記事⇩

無事発言できたので、JSコードを書きます。

JS

const express = require('express');
const { Client, GatewayIntentBits } = require('discord.js');
const path = require('path');
const bodyParser = require('body-parser');

const DISCORD_TOKEN = 'YOUR_DISCORD_BOT_TOKEN'; 
const CHANNEL_ID = 'YOUR_CHANNEL_ID';             

const app = express();

const client = new Client({ intents: [GatewayIntentBits.Guilds, GatewayIntentBits.GuildMessages] });

client.login(DISCORD_TOKEN);

client.once('ready', () => {
    console.log('Bot is ready!');
});

app.set('view engine', 'ejs');
app.set('views', path.join(__dirname, 'views'));

app.use(express.static(path.join(__dirname, 'public')));

app.use(bodyParser.urlencoded({ extended: true }));

app.get('/', (req, res) => {
    res.render('index'); 
});

app.post('/send-message', async (req, res) => {
    const { options } = req.body;
    let message = '';

    if (options && options.includes('Option 1')) {
        message += '通常起動 ';
    }
    if (options && options.includes('Option 2')) {
        message += 'メンテナンス起動 ';
    }
    if (options && options.includes('Option 3')) {
        message += 'Javaのみ起動(BE不可)';
    }

    if (!message) {
        return res.status(400).send('オプションが選択されていません。');
    }

    try {
        const channel = await client.channels.fetch(CHANNEL_ID);
        await channel.send(message.trim());
        res.send('メッセージが送信されました: ' + message.trim());
    } catch (error) {
        console.error('メッセージ送信エラー:', error);
        res.status(500).send('メッセージの送信に失敗しました。');
    }
});

const PORT = 3000;
app.listen(PORT, () => {
    console.log(`サーバーがポート${PORT}で起動しました。`);
});

ejs

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Discordメッセージ送信</title>
</head>
<body>
    <h1>Discordにメッセージを送信</h1>
    <form action="/send-message" method="POST">
        <label>
            <input type="checkbox" name="options" value="Option 1"> Option 1 (通常起動)
        </label><br>
        <label>
            <input type="checkbox" name="options" value="Option 2"> Option 2 (メンテナンス起動)
        </label><br>
        <label>
            <input type="checkbox" name="options" value="Option 3"> Option 3 (Javaのみ起動(BE不可))
        </label><br>
        <button type="submit">送信</button>
    </form>
</body>
</html>

多分エラーが出る気がするけど次回から動作確認をします。
早めにコードの変なところを見つけた方はコメントをお願いします。
今回はここまd

続き

pt.1

pt.2以降

未投稿

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?