見出し画像

イカナカマのイベントをDiscordのフォーラムチャンネルに送信する(RSS配信)

やぽ。きゃぬです。

この記事をみると、これが作成できます。

それぞれのフォーラムで大会募集ができて便利

注意事項

コードはChat-GPTが作ったもので、私自身にコードの知識はございません
あくまでわたしのアイデアです。細かい部分に関してはご調整下さい
諸々ご了承の上なんとやら

準備物

スプレッドシート

スプシに記録して、GAS(GoogleAppScript)でDiscordに送信するのでGoogleアカウント必要でござます

Discord Webhook URL

この記事ではBOT名とサムネイルをコードで指定しますがどっちでもOK

どっちかの手順で作成できるよ

  1. サーバー設定>連携サービス

  2. 指定チャンネルの設定>連携サービス

RSS配信URL

イカナカマのイベントって書いてますけど、RSS配信されてるもの/取得できるものなら(おそらく)なんでもおけまるです!

ご丁寧なページやとRSS のアイコンとか文字が設置してあって、クリックすると配信URLを取得できるんですけども
そーゆーの置いてないページは、RSSリーダーというツール(RSS.appとか)を利用したり、右クリック>検証でソースコードを見て確認できます。
イカナカマもRSSリーダーやら使わんと取得できんです。

RSS配信に関して言い回しや言葉のチョイスがミスッてるかもしれないですけどまあざっくりこんな感じかと思われる。

ほなはじめよか

スプシに書くやつ

スプシ名:イカナカマRSSとか。なんでも良き。
A〜D列の1行目:date/link/title/description

GAS実行後はこんな感じで取得されま

GASに書くやつ

スプシ>拡張機能>App scriptに進んで下さいまし

今回は「イベントをスプシに記録」「イベントをDiscordに送信」の2つのコードにわけて書くます(1つにまとめることもできますぞ)

イベントをスプシに記録するコード
実行したら、スプシのA〜D列にイベント情報が入る
かくかくしかじかでイカナカマイベント投稿日が取得できなかったので、A列のdateには取得日が記録されるます
変更したい場合は有識者かChat-GTPに聞いてくれめ・・

2行目の`var feedUrl = ''`にRSS配信URLをいれる

function recordRssFeedAndSendLinksToDiscord() {
  var feedUrl = 'ここにRSS配信URLをぽいっとな。https://rss〜〜.xml的な';
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var response = UrlFetchApp.fetch(feedUrl);
  var xml = response.getContentText();
  var document = XmlService.parse(xml);
  var root = document.getRootElement();
  var channel = root.getChild('channel');
  var items = channel.getChildren('item');

  var linksInSheet = sheet.getRange('B:B').getValues().flat();
  var linksRecorded = new Set(linksInSheet);
  var newLinks = [];

  // 取得日の日付を取得
  var today = new Date();
  var todayFormatted = Utilities.formatDate(today, "JST", "yyyy/MM/dd");

  for (var i = 0; i < items.length; i++) {
    var item = items[i];
    var link = item.getChildText('link');

    if (!linksRecorded.has(link)) {
      var title = item.getChildText('title');
      var description = item.getChildText('description');

      sheet.appendRow([todayFormatted, link, title, description]);
      newLinks.push(link);
      linksRecorded.add(link);
    }
  }
}

イベントをDiscordに送信するコード
実行したら、A列が今日の場合にC列のtitleをフォーラムのスレッドタイトルに、C列(title)+B列(link)をコンテンツ(スレッドの最初のメッセージ)にしてWebhoo経由でDiscordに送信する。

`const url = ""`にフォーラムのWebhookURLをいれる
usernameとかavatar_urlも任意のをいれる
入れなくてもいいけど入れたほうがかわちい

function postToDiscord() {
  const url = "ここにWebhookフォーラムのURL";
  const sheet = SpreadsheetApp.getActiveSheet();
  const rows = sheet.getDataRange().getValues();
  const today = new Date();

  for (let i = 1; i < rows.length; i++) {
    const date = new Date(rows[i][0]);
    if (date.toDateString() === today.toDateString()) {
      const thread_name = rows[i][2];
      const content = rows[i][2] + " " + rows[i][1];
      const payload = {
        "content": content,
        "username": "任意のBOT名前",
        "thread_name": thread_name, 
        "avatar_url": "任意のBOTアバターURL"
      };
      const options = {
        "method": "post",
        "payload": JSON.stringify(payload),
        "contentType": "application/json",
      };
      UrlFetchApp.fetch(url, options);
    }
  }
}
実行するとこんな感じで送信される

GASのトリガー設定

ここまでいくとほぼ完成なんやけど、トリガー設定しないと手動実行しやんといけんで面倒なのよん

最短1分単位で実行できるけど、GASの実行数には制限があるのと、イカナカマのイベント的にも1日1回で十分じゃないかと思われるます

左側の時計マーク(トリガー)>トリガーを追加

実行する関数を選択:任意の関数
イベントのソース:時間手動型
時間ベースのトリガーのタイプを選択:日付ベースのタイマー
時刻を選択:任意の時間

例えば、スプシの記録を0時、Discord送信を10時とかにしておけば流れバッチグーアルネ
これ逆にしたら今日のスプシの記録ない状態でDiscord送信になるから、意味ナイナイね

おわり

Chat-GPTでいろいろなものが作れてたのCでございますです!

今までBOT作成外注してましたのー
ただ、相場が3000円〜なので複雑なものでなければ、1ヶ月20$払ってChat-GPTで自分の好きなようにするのがコスパ良良でしたね

まあ諸々自己責任ですけれども

なんかよくわからんけどエエヤンって思ったら気分アガルのでいいね下さいまし♩

ほなまた

いいなと思ったら応援しよう!