Help us understand the problem. What is going on with this article?

Discord.jsで簡単にbotを作成する【基礎編】

More than 1 year has passed since last update.

はじめに

最近流行りのDiscord、どうやらNode.jsを使って簡単にbotを作れるらしい...
ということで挑戦。その時のメモ。

前提

Node.js Ver.9.x以降がインストールされてる事

漢は黙ってインストール

Node.jsインストールコピペ
sudo apt-get update ; sudo apt-get upgrade ; sudo apt-get install -y nodejs npm ; sudo npm cache clean ; sudo npm install n -g ; sudo n stable ; sudo ln -sf /usr/local/bin/node /usr/bin/node

DiscordのAPI Tokenをゲットしておく

DEVELOPER PORTALへ行って "New App" をクリック→"APP NAME" と"APP ICON" を設定して "Create App"をクリックする。
終わったら"Bot"にある "Create a Bot User" でBotユーザーを作る。
"Bot"欄に"Username"と"Token:click to reveal"が表示されるので、"Token:click to reveal"をクリックして、表示されたTokenをメモっておく。

とりあえず作ってみる

1. App.jsを作ってエディタで開く

(テキストエディタ戦争が起こりそうだけどここはvimで)

touch App.js
vim App.js

2. 以下の内容をコピペ

App.js
//ログイン処理
const Discord = require('discord.js');
const client = new Discord.Client();
const token = 'ここにBotのToken';
client.on('ready', () => {
    console.log('ready...');
});
//Bot自身の発言を無視する呪い
client.on('message', message =>{
    if(message.author.bot){
        return;
   }
//↓ここに後述のコードをコピペする↓

//↑ここに後述のコードをコピペする↑
});
client.login(token);

3. 基本的なコードを押さえよう

・指定した語句の場合返信する(完全一致)

例;「寒いね」と言った場合に「寒いね」と返信する
寒いねと話しかければ寒いねと答える人のいるあたたかさ

App.js
      if (message.content === '寒いね') {
        let channel = message.channel;
        let author = message.author.username;
        let reply_text = `寒いね`;
        message.reply(reply_text)
            .then(message => console.log(`Sent message: ${reply_text}`))
            .catch(console.error);
        return;
   }

・指定した語句を含む場合返信する(部分一致)

例;「おはよ」を含む場合に「おはようございます!」と返信する

App.js
if (message.content.match(/おはよ/)) {
        let channel = message.channel;
        let author = message.author.username;
        let reply_text =`おはようございます!`;
        message.reply(reply_text)
            .then(message => console.log(`Sent message: ${reply_text}`))
            .catch(console.error);
        return;
    }

・コマンド送信者にメンションを行わずに返信する

上記のコマンドと異なりメンションは行われません!
例;「おはよ」を含む場合に「おはようございます!」と返信する

App.js
if (message.content === 'おはよ') {
//部分一致の場合は if (message.content.match(/おはよ/)) {
message.channel.send(`おはようございます!`)
}

・指定した語句を含む場合投稿を削除する

SPAM対策に有用
例;Discordの招待リンク「discord.gg」を含む場合は削除する

App.js
    if (message.content.match(/discord.gg/)) {
        message.delete(100)
   }

Tips
${author}で発言者の名前を抜き出せます
例;「おはよ」を含む文字を発言した場合、「(発言者)さん、おはようございます!」と発言する

App.js
if (message.content.match(/おはよ/)) {
message.channel.send(`${author}さん、おはようございます!`)
}

4. 実行してみよう

「寒いね」と言われたら「寒いね」と返信して、「discord.gg」を含むワードがある場合は削除するBot

App.js
//ログイン処理
const Discord = require('discord.js');
const client = new Discord.Client();
const token = 'ここにBotのToken';
client.on('ready', () => {
    console.log('ready...');
});
//Bot自身の発言を無視する呪い
client.on('message', message =>{
    if(message.author.bot){
        return;
   }
//↓ここに後述のコードをコピペする↓
   if (message.content === '寒いね') {
        let channel = message.channel;
        let author = message.author.username;
        let reply_text =`寒いね`;
        message.reply(reply_text)
            .then(message => console.log(`Sent message: ${reply_text}`))
            .catch(console.error);
        return;
    }
    if (message.content.match(/discord.gg/)) {
        message.delete(100)
   }
//↑ここに後述のコードをコピペする↑
});
client.login(token);

コードが書けたらとりあえず保存します。
保存できたら以下のコマンドを実行してください

npm install discord.js
node App.js

ready...と表示されたらとりあえずは成功です!
あとはApp.jsをゴニョゴニョ書き換えて自分だけのbotを作ってください。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away