【同人サークル向けtips】discordにBOOTH商品販売通知botを設置する

 いかがでしたか?(先制攻撃)

 前回に引き続き、今回は、以下の画像で「売れている!」とか叫んでいるBOOTHで商品が購入されたときに通知してくれるbotについて解説していきます。

 上記のツイートに書いているとおりで、これは複数名が参加しているサークルにとってはモチベーション的に非常に嬉しいものです。一人サークルの場合は全く不要です。メールを見れば良いから。

 そう、メールです。BOOTHで商品が売れたときというのは、それを知らせるメールが届きます。このbotはメールをトリガーにして動いています。具体的に言うと、

  • BOOTHからの通知メールをgmailで受信する
  • gmailで、BOOTHからの通知メールに特定のラベルを付けるフィルタルールを設定する
  • Google Apps Scriptで、gmailの受信ボックスで特定のラベルが付いた未読メールを検索し、ヒットしたらdiscordのWebhookにpostして、当該メールを既読にする処理を定期実行する

 以上です。IFTTTよりちょっと難しいですね。IFTTTはgmailの受信ボックスと連携できないからです。許せねえな。でもgmailのフィルタルールとGASを活用することで、案外簡単なんですよね。BOOTH以外のサービスでも、売れたことをメールで通知してくれるようなサービスになら応用も利くと思います。

 ここまで説明したら分かる人には分かったと思うし以下は雑に説明していきます。

gmailのフィルタ設定

 説明は以上です。

Google Apps Script

 Google Apps Script、通称GAS。これってG suite scriptとかに改称されたりしてないんだなと思っていま調べたらもうG suiteとも言わないのか。さてこれは何かというと、まあざっくり言えば……エクセルのマクロあるじゃないですか、あれのGoogle版です。

 これはGoogleのサービスを良い感じに操作できて……

var checkLabel = "booth";
var threads = GmailApp.search('is:unread label:' + checkLabel);

 これでboothラベルが付いた未読メールを検索できます。うわあ、良い感じじゃないな。スレッド単位。BOOTHの販売通知メールは基本的にスレッドに固まってしまうのでそれを踏まえた処理が必要になります。

 さて、以下はそれを踏まえていない処理です。

var count = threads.length;
for(var i = 0; i < count; i++) {    
    var messages = threads[i].getMessages();
    if(messages.length > 0){
        var postMessage = "BOOTHから通知:`" +
            threads[i].getFirstMessageSubject() +
            "`\n『紙魚はまだ死なない』 が売れている!";
        discord(postMessage);
        for(var j = 0; j < messages.length; j++){
            messages[j].markRead(); //これthreadに対してmarkReadでよかったな
        }
    }
}

 何で踏まえていないかというと、適当に検索して出てきたコードを加工してスレッド内を順番に通知するように書いたら既読分まで通知してしまうバグが出て、そこでちゃんと未読だけ通知するように改修すりゃいいのにめんどくさくなって1回だけ通知にしていることにより、謎の構成になっててなんかこう、尾てい骨みたいな、盲腸みたいな感じになってますが、まあこういう割り切りが、デジタルトランスフォーメーションです。こうやって検索して拾ったコードを切り貼りして作ったやつを溜めておいて設計図共有サイトで共有すると転職サイトで適正年収が診断できます。まあ10分ごとに実行とかにしておけば、その時間内に一気に何部も売れるってことあんまりないだろうし……目的はみんなのドライヴ感だから……。

 discordを呼ぶところは普通にこうです。これはこの記事の方のを利用。

function discord(message) {
    const url        = 'https://discordapp.com/api/webhooks/xxxxxxxxxxxxxxxxxxxx'; //discordのwebhooksのurl
    const token      = 'xxxxxxxxxxxxxxxxxxxxxx';//discordのwebhooksのトークン
    const channel    = '#egosearch';//送信したいチャンネル
    const text       = message;
    const username   = 'ささのはストア';
    const parse      = 'full';
    const method     = 'post';

    const payload = {
        'token'      : token,
        'channel'    : channel,
        "content"    : text,
        'username'   : username,
        'parse'      : parse,
    };

    const params = {
        'method' : method,
        'payload' : payload,
        'muteHttpExceptions': true
    };

    response = UrlFetchApp.fetch(url, params);
 }

 これ動いてたけど、なんかいま公式の見たら所々不自然な気もしますが、動きゃ良いんだよ。適正年収三兆円になりたい。関係ないけどこのWordpressテーマでコードブロック始めて使ったけど(笹帽子の樹はテックブログです)、神武以来のクソダサでしょこれ。なにこれ?

 これを10分とかのトリガーで実行してください。まともな解説が読みたい人はGAS gmail 検索 webhookとかで検索して調べてみてください。いかがでしたか?(リフレイン)

【同人サークル向けtips】discordにエゴサbotを設置する

 いかがでしたか?(先出し)

 同人サークル向けのtipsということで自分が主宰した合同誌などでやっている手法を紹介します。

 まずは以下のイメージ画像をご覧ください。

 今回やり方を紹介するのは上記で「Silverfish」という名前のエゴサbotです。BOOTHの購入通知の方もそのうち紹介するかもしれない。

 これはTwitterで検索をして、ヒットした新規ツイートをdiscordに投げてくれるbotです。ここにサークル名や合同誌名を設定しておくことで余さずエゴサが実施でき、単純エゴサの手間から解放された貴方はより高度なエゴサ(戦利品画像ツイートの中に自分の同人誌が映り込んでるのを探すとか)にシフトできます。これが、デジタルトランスフォーメーションです。

 これは非常に簡単にできています。

  • IFTTTでtwitter検索して、ヒットしたら、
  • discordのWebhookにPostする

 これだけです。

IFTTT

 これです:https://ifttt.com/

 便利です。IFTTT、If this then that、なんかあったらなんかする。無料アカウントで3つまで、この「なんかあったらなんかする」を作ることができます。ここに、「Twitterでxxxを検索して新規ツイートがヒットしたら、Webリクエストする(If New tweet from search for xxx, then Make a web request)」という設定をします。

 まずアカウントを作成して https://ifttt.com/create に行くと、こういう画面が出ますね?

 ここでIf This(なんかあったら)、Then That(なんかする)を指定します。

 If Thisをクリックして、Choose a Service画面でTwitterを選択、Choose a trigger画面でNew tweet from searchを選択しましょう。Search条件にエゴサしたいワードを入れます。Twitter検索の文法が使えるので、ORで複数単語入れたり、RTは除外したりといった設定も可能です。このあたりは事前にTwitter検索で欲しいエゴサ結果になっているかどうか確認すると良いですね。なお、初回はそもそもTwitterアカウントを認証する必要があります。

↑なんか入力欄見切れてるけどな

 さてIf Thisの設定ができたら次はThen Thatです。

 Then ThatをクリックしてChoose a Service画面に行ったら、今度はWebhooksを選択し、Choose an actionでMake a web requestを選択します。一択でも選択なんだよ。

 入力欄が出てきたけど何を入れたら良いか分かりませんね? ここでdiscord側でWebhookの設定を確認しに行きましょう。

Discord

 DiscordのBotというのは、本物のBot(アカウントを持って振る舞うやつ)と、WebhookのBot(正式名称は知らん)がありますが、ここで言っているのは後者です。

 管理権限を持っているDiscordのテキストチャンネルの設定画面を開くと、「連携サービス」というメニューがあり、ここにWebhookの設定があります。

「新しいウェブフック」を押して、botのアイコン、名前、チャンネルを選択します。

 選択できたら「ウェブフックURLをコピー」しましょう。そのURLはたいせつです。URLを知っている人はあなたのdiscordチャネルに書き込みし放題になります。ツイートしたりしないように!

IFTTTの続き

 Make a Web Requestの設定画面で、以下のように設定します。

  • URL:たった今discordからコピーしたURLを入れる
  • Method:POSTを選択
  • Content Type:application/jsonを選択
  • Body:{ “content” : “{{LinkToTweet}} ” }と入力。LinkToTweetのところが良い感じに表示されます(?) ここは分かってる人はお好みでカスタマイズしてください。

 さて、これでIf This Then Thatが指定できたので、Continueします。

 必要に応じて名前を付けて、Finishです。試しに条件に当てはまるツイートをしてみて、反応するのを待ってみましょう! よきエゴサライフを!

↑設定例

『わたしの名は赤』 オルハン・パムク 宮下遼 訳

 なぜ積読に入っていたのか記憶喪失だけどなんかミステリ的な文脈で勧められた気がしています。確かに殺人事件が起きて犯人が分からない(容疑者三人のうちの誰かである)という状態で話が進んでいくので、推理小説的な趣向を取り入れてはいるけれど、ミステリとしてのエンタメ的な面白さがあるのかというと別にそんなになくて、しかしこの西洋と東洋の相克を中心に繰り広げられる論争、ものすごいボリュームの挿話、オスマントルコの香り、そして語りの重層がすごい。語り手が章ごとに変わって、主要登場人物たち以外にも死体だったり犬だったり金貨だったり赤だったりが語り手になっていくというのが単純に多彩で面白い(細密画だね)。それで彼らがみな語り手であることに自覚的だというところで、十六世紀っぽくないというかモダンな感じが入り込んでくるのも、やっぱり面白い。あと、三人がそれぞれ三つの寓話を話すところとか、ダイジェスト的に絵で話が進むシーンがすごい好きだった。長くてちょっと疲れるけど良い読書。

CONTROL

 これは神ゲーです。

 めちゃめちゃ面白かった。今本編が終わったところでこれを書いています。DLC分がまだあるしやってないサイドミッション結構な量がありそうだからまだまだ楽しめるな。

 まず設定やストーリーテリングがめちゃめちゃ良いんですよね。SCP財団に影響を受けた感じの世界なんだけれども、これはツイッターにも書いたがSCP財団僕は好きじゃないんですよ。理由はよくわからんがシェアワールド的な共同二次創作的なあれが好きじゃなくて。でもこういう風にちゃんと独立の作品にしっかりなってた場合にはSCP財団的な、ニューウィアード? これ、題材としてはめちゃめちゃ好きなことに気づかされてしまった(サザーン・リーチも読まなきゃ……)。っていうか自分もそういう小説書きたくなってしまったので多分書きます。さてそういう世界設定が、めちゃめちゃ大量で読むのだるいテキスト資料と、おもしろ映像資料で浴びせかけられてくる。特に映像資料が好きで、ダーリング博士のキャラが良すぎる。スレショルドキッズは意味不明だよあれなんなんだ。ダーリング博士のダイナマイトがこのゲーム最高のクライマックスだった。

 アクションゲームとしてはなんか怠いなと最初は思ったんですけど、じきに楽しくなりました。最初は結構コツが掴めないというか、いやコツはあって、後退して慎重に一体ずつ殺すのがコツなんですけど、それ気持ちよくないじゃないですか。だからまあアクションとしてはなとか思ってたんですけど、段々能力強化して武器も強くしていくとどこかのタイミングですごい楽しくなった。まあ多分投擲を強化しまくったタイミングな気がしてならないが。投擲して通常か貫通打ってれば良いみたいなところはありそう。

 で終盤は演出が良かった。序盤から演出のかっこよさは抜群だったけど、終盤になって終盤らしい畳みかけがすごくて、フィンランドのタンゴ強制視聴からの迷路の爽快感、すごすぎるでしょう。すごい設計だよこれ。でクソダルコーヒーカップ片付けの一連のやつでもアーティーが良い味出してるのホントズルいな。アーティーが一番好きだけど、というか全キャラ味付けめちゃめちゃ濃いのもすごい。なんだこの連中。もう終盤はうおおお!!!っていう楽しさだった。神ゲーです。

(追記)書き忘れたんだけど公平を期すために言っておくと、日本語ローカライズはゴミです。誤訳、統一されてない口調、統一されてない訳語、画面に収まってないテキストなどがありふれている。これで金取ったらダメだよ。

#百合文芸3 を読む2

 続きです。

前回:https://www.sasaboushi.net/blog/2021/01/31/1860/


家出の仕度(おか)

  • ジャンルはわからないがちゃんとした小説(広義の恋愛小説……ささやかな交流もの?)
  • これ良いですね! 心情描写が丁寧で好きでした。
  • 高校生デートかよみたいな下り、好き。
  • 「早期退職した50代女性と30代ネイリストの話」と言われたら普段の自分だったら食指が動かないであろうところ、これは読んで良かった。こういうフォロイーの投稿作品は全部読むぞみたいな企画をやって良かったという瞬間ですね。

お姉さんと十二歳の私がグリーン缶を飲む話。(すみやき(明日から休講です。))

↑読んだのはURL1つ目の方
  • ジャンルは……お姉さんと十二歳の私がグリーン缶を飲む話?
  • 文体やギャグが好みとズレていたので残念ながら自分には合わなかったけれど、最後までやりきっているので作風としてしたいことをしていると思う。

美少女探偵美咲 青空のディスタンス(鳴原あきら)

  • ミステリ。
  • 笑うとこじゃないんだけど冒頭のセメントの下りの説明台詞なんか面白くて笑ってしまった。
  • 日常の謎系で百合なのでジャンル的に好きなやつです。楽しめた。
  • 同時に、ジャンル的に好きということはハードルが上がってしまうので欲張りなコメントをすると、文字数に対して関係者が多くて、中野さん後半になって飛び込んできたな感がちょっとあった。
  • シリーズ設定になっているので続きも書くのでしょうか。書かれたら読みます!

以上! 駆け込みで投稿した人とか見逃してたらごめんなさい。皆様お疲れ様でした。