Closed5

Discord.jsでスケジュールイベントを作りたい

ななねななね

情報少なすぎ…と思ったけど必要なことはいつだって公式に書いてあるんだ…
GuildScheduledEventManager
https://discord.js.org/#/docs/discord.js/main/class/GuildScheduledEventManager

createメソッドがあるので作れそう。早速書いてみる
guild.scheduledEvents.create()

Guildクラスはreadyから生やすならfetch()で持ってくる必要がありそう。
面倒なので今回はcacheから拾ってくることにする。
readyより前だとundifindになるので注意

ななねななね

create()の中身は何が必要かな?

GuildScheduledEventCreateOptions
https://discord.js.org/#/docs/discord.js/main/typedef/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
})
このスクラップは2023/01/30にクローズされました