1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[discord.js] グローバルチャットを作る!

Last updated at Posted at 2020-05-20

概要

discord.js のバージョンが v12 になり、グローバルチャットの機構を作ったので、メモしとこうかなと思います。
(ほかの人も記事を書いているので参考程度に...)
解説とありますが、まだまだすごい discord.js が扱えるわけではないので、間違っているかもしれないので
気軽に見てってください。

BOTの導入や Node.js 等のインストールはすでに済んでいるものとします。

環境

名前 versionとか
Node.js v12.16.3
discord.js v12.2.0
OS : Windows10

コード

index.js
const Discord = require("discord.js"); // --1
const client = new Discord.Client();

client.on("message", async message => { // --2
  if (message.channel.name === "チャンネル名") { // --3
    if (message.author.bot) return; // --4
    if (!message.attachments.size) message.delete();

    client.channels.cache.forEach(channel => { // --5
      if (channel.type === "text") { // --6
        if (!message.attachments.size) {
          const embed = new Discord.MessageEmbed() // --7
            .setAuthor(message.author.tag, message.author.avatarURL())
            .setDescription(message.content)
            .setColor(0x2c2f33);
          if (channel.name === "チャンネル名") { // --8
            channel.send(embed);
          }
        } else {
          message.attachments.forEach(attachment => { //--9
            const embed = new Discord.MessageEmbed()
              .setAuthor(message.author.tag, message.author.avatarURL())
              .setImage(attachment.url)
              .setDescription(attachment.url)
              .setColor(0x2c2f33);
            if (channel.name === "チャンネル名") {
              channel.send(embed);
            }
          });
        }
      }
    });

    return;
  }
});

client.login("BOT_TOKEN"); // --10

解説

--1 : discord.jsの読み込みをしています
--2 : Message イベントが起こったときに、この括弧内の処理がされます
--3 : Message が送信されたチャンネルが チャンネル名 だった場合になるように条件分岐をしています
--4 : 再帰を防ぐために、Messageを送信した人がBOTだった場合は処理を行わないように return を書いています

--5 : BOTが参加しているすべてのサーバーのチャンネルを取得しています (簡単に言うと forEach は for に似たようなもの)
--6 : 取得したチャンネルのうちチャンネルがテキストチャンネルか否かを判断する条件分岐です
--7 : v11.xでは Discord.RichEmbed() でしたが、v12.x では Discord.MessageEmbed() になりました
--8 : 取得したチャンネルのうちチャンネルの名前が チャンネル名 か否かを判断する条件分岐です
--9 : 写真等が送信されたときに処理が行われます (解説が書けそうでしたら後日書きます)
--10 : これがなければBOTにはログインしてくれません

まとめ

グローバルチャットはBOTが導入されているサーバーで会話することができます。
ただトラブル等起きやすいので、グローバルチャットを利用するときは常識を守りましょう。

上のコードはシンプルな方です。まだまだいろんな機能を付け加えられると思うのでぜひチャレンジしてみてください!

1
2
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
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?