7
11

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 v12がリリースされたので追加されたものを一部紹介

Last updated at Posted at 2020-03-02

とうとうこの日が来ました。Discord.js v12がリリースされました。🎉
Discord.jsユーザーの9割はこの時を待ち望んでいたでしょう!ということでDiscord.jsの新機能というか、追加された一部分を紹介します。

Discord.js とは

Discord.jsは、Discord APIと簡単にやり取りできる強力なNode.jsモジュールです。
https://discord.js.org/#/

v12のリリースまでに凄く時間がかかっている。

このv12ですが結構前から開発が進んでいたものをリリースしたものです。破壊的変更が大量にあります。
v11のコードをそのまま動かすとほぼ確定でエラーが起きるでしょう。
そしてこの記事を読んでも1割、いや1割以下しか理解したことにならないでしょう...

Node.jsのアップデートが必要

今回のv12リリースで、Node.jsのバージョンはv12.x以降となりました。node -vコマンドでNode.jsのバージョンを確認して必要ならNode.jsの公式サイトからダウンロードして更新しましょう。

追加されたものの紹介

Discord.jsのオブジェクトを自由に拡張できる - Structuresクラス

公式ドキュメント: https://discord.js.org/#/docs/main/stable/class/Structures

過去にこちらの記事で書いてありますが改めて紹介します。

MessageやGuildなどのオブジェクトに、関数やプロパティを自由に追加することが可能になります。例えばユーザーのデータを取得するために一々モジュールをインポートしてー... なんてことも、これがあればユーザーオブジェクトからデータを取得して...ということができます。

注意点は、Clientをインスタンス化する前に拡張の処理を済ませること

コード

const { Structures, Client } = require('discord.js')

Structures.extend('Guild', Base => class extends Base {
  getGuilds () {
    return this.client.guilds
  }
})

const bot = new Client()

bot.on('guildCreate', guild => {
  console.log(guild.getGuilds().cache.size)
})

bot.login()

使い道がよくわからない人のために実際にこの機能を使ったコードをGitHubに公開しておきました。

Server Boostに対応 - Premium Guild

Server Boost(Nitro Boost)が使われているサーバーのレベルなどを取得できるようになりました。

Guild

プロパティ 返り値 説明
.premiumSubscriptionCount number または undefined サーバーをブーストしている人の人数
.premiumTier PremiumTier ブーストのレベル(返り値の詳細はこちら
PremiumTier
  • 0 ブースト無し
  • 1 ブーストレベル1
  • 2 ブーストレベル2
  • 3 ブーストレベル3

GuildMember

メンバーがいつサーバーをブーストしたかを取得することが可能です。

プロパティ 返り値 説明
.premiumSince Date または undefined メンバーがブーストした時をDateオブジェクトで返します。
.premiumSinceTimestamp number または undefined メンバーがブーストした時を数値で返します。

画像形式やサイズを指定できるようになった。

guild.iconURLはプロパティでしたが、guild.iconURL()というメソッドに変更されました。
よって

guild.iconURL({ format: 'png', dynamic: true, size: 1024 })

こういう書き方ができるようになり、画像形式、サイズの指定ができるようになったわけです。これでwebp形式の画像が表示できないiOS版Discordの対応ができるというわけです。
ちなみにiOS版Discordに対応するためにはこのオプションにしておくといいです。

guild.iconURL({ format: 'png', dynamic: true })

dynamicオプションが有効だと、アニメーション画像はGIF形式の画像URLを受け取り、それ以外はPNG形式の画像URLを受け取ります。(デフォルトだとwebp形式で受け取ります。)

displayAvatarURLavatarURLsplashURLも同様のオプションが使用できます。

v11からv12にするために

現在公式ガイドの翻訳が進んでいる。こちらのサイトを見るのが良いでしょう。今後この記事で詳しく書くかもしれません。

この記事が作成された日にリリースされたのでまだv12の情報はほとんど無いと思われます。もしv11からv12への移行で困っていることがあれば、日本語のコミュニティを活用したり、ドキュメントを見たほうがいいでしょう。

まだまだ更新していくのでストックしておくといいかも?

7
11
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
7
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?