Discord.jsでスケジュールイベントを作りたい
いわゆるこれをbotにさせたい
情報少なすぎ…と思ったけど必要なことはいつだって公式に書いてあるんだ…
GuildScheduledEventManager
createメソッドがあるので作れそう。早速書いてみる
guild.scheduledEvents.create()
Guildクラスはreadyから生やすならfetch()で持ってくる必要がありそう。
面倒なので今回はcacheから拾ってくることにする。
readyより前だとundifindになるので注意
create()の中身は何が必要かな?
GuildScheduledEventCreateOptions
基本的に必要そうなやつ
-
イベントの名前
name -
開始時間
scheduledStartTime
Date objectかtimestampかISO8601を指定すれば良い -
プライバシーレベル
privacyLevel
数字で指定。ギルド参加者限定の場合は2 -
エンティティタイプ
entityType
どこで開催するか?数字で指定。
ステージは1、ボイスチャンネルは2、他の場所は3 -
開催場所
channel
エンティティタイプがStageInstanceかVoiceは設定しないといけない。
開催する際の集合チャンネルを指定
entityTypeがExternalの場合は必要な項目
-
終了時間
scheduledEndTime -
メタデータ
entityMetadata
エンティティタイプExternalで必要
開催場所のこと。
その他
-
イベントの説明
description -
画像
image
カバー画像設定できる -
理由
🤔
reason
レスポンスはPromise<GuildScheduledEvent<GuildScheduledEventStatus>>なのでawaitしておく
タイムゾーンには注意。そのままだとむこう時間(UTC?)になる。dayjs使ってるのでtzを使った。
const res = await guild.scheduledEvents.create({
scheduledStartTime: dayjs.tz("2023-02-05 21:00").toISOString(),
name: "イベントタイトル",
description:"ゲームの参加者を募集します!",
privacyLevel: 2,//サーバー参加者限定
entityType: 2,//ボイスチャンネル
channel:client.channels.cache.get("チャンネルID") as VoiceChannel
})
ヤッター!できた!