marukot-chの日記

弱小SEの雑記です

ライブ配信を通知するBotがだいたいできたので、公開します(追記:機能追加や仕様変更のお知らせ)

先日ブログに書いた、ライブ配信を通知するBotが概ね作成できたので公開します。

f:id:marukot-ch:20211206171045p:plain

いらすとや(拡声器・メガホン)

きっかけ

  • ニコニコ生放送は配信通知が優秀でいい感じなのですが、YouTubeの配信通知がなぜか来なかったりして困っていました
  • 通知がこないなら作ればいいかなと思って作った次第
  • このBotは無料です(また、無料で動いています。Replitに感謝です)

 

概要

  • Discordのスラッシュコマンドに対応した配信通知Botです(まだニコニコ生放送とYouTubeしか対応してません)
  • ただし、あまりサーバーに負荷をかけないように2分ごとに確認するようにしてます(そしてたまにバグって通知しないこともあります。。。)

 

コマンド

/live-notification_add

 配信通知を登録します
 - 必須のオプション(1つ)
   - live_channel_id(配信通知対象のチャンネルID)
     - ニコニコ生放送の場合はcoXXXXXXの部分
        - coは省略可
     - YouTubeの場合は、UCxxxxxxxの部分
- オプション
  - notification_chanel(通知チャンネル)
      - #xxxxで指定したチャンネルに配信通知します
      - そのままチャンネル名を指定することもできます
    - このオプションがない場合、コマンドを実行したチャンネルに配信通知します
  - mention(メンション)
    - 通常のメッセージと同様に、@xxxx形式で入力してください(配信通知時にメンションされます)
    - @here,@everyone,@username
  - reply_is_hidden(ほかも同じなので以降省略)
    - 自分のみ
      - 実行結果は自分だけ見ることができます
    - 全員に見せる
      - 実行結果はBotからのリプライとして表示されます

/live-notification_list

 配信通知を確認します
 -  オプション(2つ): disp_all_flag, reply_is_hidden

  - disp_all_flag: すべての配信通知を表示するかどうか

    - すべて表示(BotとのDMの場合、デフォルト)

       - すべての配信通知を表示します

    - コマンドを実行するギルドへ登録した配信通知のみ表示(デフォルト)

       - そのギルドに登録した配信通知のみ表示

/live-notification_delete

 配信通知を削除します

 - 必須のオプション(1つ)
    - live_channel_id(配信通知対象のチャンネルID)
      - ニコニコ生放送の場合はcoXXXXXXの部分(coは省略可)
      - YouTubeの場合は、UCxxxxxxxの部分
 - オプション:  reply_is_hiddenのみ

/live-notification_toggle

 配信通知のON/OFFを切り替えます
 -  配信通知したくない場合に実行します(一時的に通知しない場合などにオススメします)
 - オプション:  reply_is_hiddenのみ

/live-notification_set-filterword 

 配信通知したくない文章をコンマ区切りで指定できます

 - 必須のオプション(1つ):  filterwordのみ

    - 配信通知したくない文章をコンマ区切りで指定します

    - このオプションが未指定の場合、現在設定されているfilterwordを確認します

    - 例: 宣伝,PR,ダイオウグソクムシ

      - 「宣伝」または「PR」または「ダイオウグソクムシ」を含む動画は通知されません

 - オプション(1つ):  reply_is_hiddenのみ


どう通知されるか

 YouTube
    - 予約が追加

https://i.gyazo.com/1a4ef9a9876763b4d192f25f4e847b49.png

*現在の仕様(20222/01/09時点)では、embedではない側(本文?)にも動画名を表示しています。また、予約配信日時も表示するようになっています


    - 配信が開始

https://i.gyazo.com/82c7684ea7278e85d6e905f252f6fc25.png

*現在の仕様(20222/01/09時点)では、embedではない側(本文?)にも動画名を表示しています。

 

    - 動画が追加

https://i.gyazo.com/d477fa4e23d83605f8a34c3bc31db718.png

*現在の仕様(20222/01/09時点)では、embedではない側(本文?)にも動画名を表示しています。

 

 ニコニコ生放送
    - YouTubeの配信開始と大体同じ感じです

 

招待リンク

https://discord.com/api/oauth2/authorize?client_id=906176657650503740&permissions=380104862720&scope=bot%20applications.commands

 

ソース

github.com

 

サポートサーバー

discord.gg

 

終わりに

なんか動かなかったらコメントなりで教えて下さい(対応できるかは怪しいですが)。

追加したほうが良い機能や修正したい挙動があれば、GitHubのIssueDiscussionsに書き込んでください。

 

追記(2021/12/22)

通知されないなぁと思って確認したらなんか止まっていたみたいです。ログを見てみると、文章が長すぎてDiscordにから拒否され、Exceptionが発生しているとのこと。
replitの方には急遽切り詰める処理を入れました。
何かバグっていたらIssue等で連絡いただけると嬉しいです(バグに気づかないと修正できませんので/修正できないバグもあるかもしれませんが...)

github.com

→これ修正したあと、説明がない場合、エラーになるバグも発生しました。。。

 

追記(2022/01/09)

■機能追加

/live-notification_set-filterwordを追加しました。通知が不要な文章をコンマ区切りで設定しておくことができます。

■仕様変更

/live-notification_listにオプションが1つ追加され、仕様が変更されました。今までは常にすべての配信通知が表示されていましたが、すべての配信通知を表示するのにオプションで指定が必須になりました(DMでは昔と同じ挙動です)。

■細かな変更

 - 全般的に動画名を本文に表示されるようにしました

 - 予約配信の場合、配信予定日時を表示するようにしました

- スラッシュコマンドはBotが見えないチャンネルでも実行ができるため、Botに権限を与えていないチャンネルで配信通知を設定すると、Botは書き込みができません。それを通知するため、書き込みできなかった場合、BotからDMでその旨(と通知)を連絡するように変更しました

↓↓↓こういうやつがきます。そうなったら、チャンネル権限の見直しをお願いします(チャンネルの閲覧権限、書き込み権限が必要です)↓↓↓

f:id:marukot-ch:20220109104229p:plain

配信通知で登録したチャンネルに書き込みできなかったときに来るDM例

 

追記(2022/03/01)

数週間前から100サーバーに到達してしまって現在追加出来ない状態となっています。

Discord側に審査を依頼しているので、それでOKもらえたらまた追加できるようになります(その際はまた追記します)。審査の過程でNGもらった場合は仕様を変更する必要があるため、対応に時間がかかる想定です。サーバーからBotを削除した際にそのサーバーの情報を削除する等の対応が必要そうな気がしています。

 

追記(2023/11/19)

アクセスしすぎでYouTubeからアクセス過多のため、一時的なBANになってしまう問題があり、こちらからアクセスしにいくプーリング方式から、向こうから情報がやってくるよう、PubSubHubbub形式にしようと修正しています。

止めていたBotを試しに動かしています。なにか問題ありましたら、程々の連絡してください(discordのフォーラムだと一番うれしいです(招待リンク))。

marukot-ch.hatenablog.com