marukot-chの日記

弱小SEの雑記です

discord用のリマインダーBot作成したので、公開します

しこしこと作っていた、リマインダーBotがDMまで対応できたので公開します。

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

いらすとや(文房具:メモ)

きっかけ

 

概要

  • Discordのスラッシュコマンドに対応したリマインダーBotです
  • リマインドの定期実行が可能です(分/時/日/月/年/曜日/(休日|平日))
  • ギルド管理者はギルドで登録されたリマインドも見ることができます
  • DMへリマインドすることもできます。BotとのDMで/remind-makeするか、チャンネルをDMとして/remind-makeしてください

 使い方(8/18追記)

  • 別記事を書きました

marukot-ch.hatenablog.com

その他

Replitで動かしているので、興味があればForkボタンで簡単にコピーできます。

(その場合、encrypted.binは消してください)

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

 

以下、招待リンクや動かいている場所、ソース(GitHub)です。

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

2023/02/26追記(今までの記載削除)

ずっと逆に書いてたようです。すみません...。上記招待リンクが正しそうです。

 

 

元/動いてた場所(Replit) *2023年現在はローカルで動かしてますreplit.com

 

ソース: 

github.com

 

なんか動かなかったらコメントなりで教えて下さい。

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

 

ScrapboxにUserScriptで自動スクロール機能を追加した

前書き

 ScrapboxというWebサービスを日記や雑記等に使っている。Scrapboxは[]で囲ったところがリンクになり、リンクを含むもの同士が関連ページとして表示されるのが特徴のサービス。その他、カーソルがある行だけ記法が表示され、公開されたScrapboxを見て、面白い手法を真似することができる。また、大変興味深い機能として、cssをカスタマイズしたり(UserCSS)、scriptをカスタマイズできる(これがUserScript)。こちらもほかの人の面白い機能を真似できてとても楽しい。

 今回、自動スクロール機能をつけてみたことについて書く。

2行で説明

  • Scrapboxにはユーザーが機能を追加することができる、UserScriptという機能がある(設定でONにする必要アリ/動かすにはユーザーページに記載が必要)
  • 個人のページにコード譜をメモったりしていて、他のコード譜公開サイトみたいに自動スクロールすると便利だと思ったので実装
続きを読む

AmazonのURLをすこし短くするブックマークレットつくった

前提

AmazonのURLはたまに気持ち悪い。なんか日本語の情報とかが入っていたりして、よく分からない。
そういうのが嫌なときは手動で消していたのだけれど、なにかのはてブで以下のブックマークレットがあることを教えてくれた(たぶん、青髪ツインテの人だったと思う)。

javascript:(function(){var asin=document.getElementById('ASIN').value; location.href='https://www.amazon.co.jp/dp/'+asin+'/';})();

これはこれで便利だったのだけれど、個人的にいちばん使う、Kindleのときに失敗してしまうことに気づいた。
それで自分で適当に作り直してみた。
元々のやつだと、ASINでやっていたが、自分のやつはレビューのところを拾ってきてASINを取っている。そういうのが無いやつ(Kindle本の全巻まとめみたいなの)もあったので、nullだったらURLを適当につける感じにしている。

javascript:(function(){var asin=document.getElementById('averageCustomerReviews');if(asin==null){location.href='https://' + location.host + location.pathname;} else{location.href='https://www.amazon.co.jp/gp/product/'+asin.attributes[1].value+'/';}})();

結果

Kindleの本のURLも簡単に短くなる(共有しやすいね!)
変換前: https://www.amazon.co.jp/%E3%83%AA%E3%83%90%E3%83%BC%E3%82%B9%C3%97%E3%83%AA%E3%83%90%E3%83%BC%E3%82%B9-3-%E8%8A%B1%E3%81%A8%E3%82%86%E3%82%81%E3%82%B3%E3%83%9F%E3%83%83%E3%82%AF%E3%82%B9-%E5%A4%A9%E4%B9%83%E5%BF%8D-ebook/dp/B097QM1MPB/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&dchild=1&keywords=%E3%83%AA%E3%83%90%E3%83%BC%E3%82%B9+%E3%83%AA%E3%83%90%E3%83%BC%E3%82%B9&qid=1626784551&s=digital-text&sr=1-1

変換後: https://www.amazon.co.jp/gp/product/B097QM1MPB/

タイトルに「すこし」と書いたとおり、元々のブックマークレットのほうがちょっと短い

適当に検索していたら、以下のようなサイトを見つけた。はてな社は色んなことしているなーと思った let.hatelabo.jp

追記(22:10)

なんかダメな例があったので、以下に変更します。

https://www.amazon.co.jp/GP-4543471003447-%E3%82%AB%E3%82%BF%E3%83%B3-%EF%BC%93%EF%BC%A4%E7%89%88/dp/B099NBWGGV/

javascript:(function(){var asin=document.getElementById('all-offers-display-params');if(asin==null){location.href='https://' + location.host + location.pathname;} else{location.href='https://www.amazon.co.jp/gp/product/'+asin.attributes[3].value+'/';}})();

DiscordのWebhookでEveryoneにメンションが飛びびっくりしたこと

 はてなブックマークには、関心ワードという機能がある。自分の場合、そこにdiscordというものを登録している。その関心ワードを集めたRSSを取得するURLを作成できるので、それを使ってDiscordへWebhookで連携している。

 そのWebhookから先日、Everyone宛にメンションが飛んだ。

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

全員へメンションを飛ばす該当のメッセージ(from webhook)

今回この記事で語るのはやったこと、ダメだったこと、成功したことを時系列で語る(どうすれば解決できるか一瞬でわかる人もいそうだけど)。

 概要を把握したい人向けに3行で説明

  • 「@everyone」を文章に含む記事がWebhookで連携されて全員にメンションされてしまった
  • everyoneロールにメンション権限を解除、適当にallowed_mentionsを設定してもダメ(WebのPostできるサイトからはうまくいくのに)
  • 'contentType': 'application/json'に指定し、payloadをJSON.stringify(payload)するとうまくいった

 記事的には以下のやつ。

 

 まず思いつくこととしてこのサーバーでは全員に、メンションできる権限をふっていたので、それをやめた。もう一度試してみるが、普通にメンションされてしまう(Webhookには効かないらしい)。

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

everyone(デフォルト)の権限のメンション可能かどうかの設定

 続いて、Googleで検索してみると、以下のサイトが見つかる。お目当ての設定も見つかった。以下のようにallowed_mentionsにそれっぽいことをすると誰にも通知されないらしい。

{
  "username": "test",
  "content": "@here hello! 今度こそOKのはず。",
  "allowed_mentions":{
    "parse": []
  }
}

allowed_mentions - Discord Webhooks Guide

 WebhookをサイトからPostして成功したのを確認し、今回事件が起こったGoogle Apps Scriptから実行してみる。
 残念ながら、むしろ何も起こらない。投稿されないし、エラーにもなっていなかった。Google Apps Scriptは無料版だとログが保持されないので、手元から実行させて確認すると、 Responseが以下だった。ステータスコードは400。
allowed_mentions "Only dictionaries may be used in a ModelType"

 検索しても全然いい記事がひっかからない。言っている意味もよくわからないし。ということでjavascriptはあんまり分かってないし、やり方が違うのか? と試行錯誤する。で、JSONで送ることを明示的に指定し、JSON 文字列に置き換えたらうまくいった(最初からそうやっておこうね。。。)。
const payload = {
  'token': discordSettings.token,
  'channel': discordSettings.channel,
  'content': postMsg,
  'parse': parse,
  'allowed_mentions': {
    parse:[
],// 追加
  }
};

const params = {
  'method': methods,
  'contentType': 'application/json', // content-typeをjsonにした
  'payload' : JSON.stringify(payload), //stringifyした
  'muteHttpExceptions': true,
};


 〜終わり〜

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

メンションされてないやつ





ルーターと回線終端装置とサービス情報サイトと私

 OCNから営業の電話がかかってきたのです。

 「回線をNTTからOCNにするだけで、月々1,000円安くなりますよ。」って。

 なるほど、と思って手続きを進めたのですが、NTTの回線契約がなくなるとフレッツ光メンバーズクラブで溜まってたポイントが消えてしまうとのこと。

 それでポイントを使ってしまおうと、手続きをしてみたのですが! 全然手続きがすすまないのです!!!

 

--

■忙しい人のための3行

・NTT回線を解約するフレッツ光メンバーズクラブのポイントが消失する

・自分の環境ではルーター(ASUS RT-AC67U)を経由するとフレッツ到達できず

・回線終端装置とPCを直繋ぎで到達し、無事ポイント消費

--

続きを読む

スラッシュコマンドを使うDiscord Botは/helpを潰さないでほしい

タイトル通り。

スラッシュコマンドを使わないBotのヘルプが使えなくなってしまうため。

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

/helpをするとコイツが発動する

 

対処方法

<スラッシュコマンドを使うBotでできる方法>

・/help-rythmなど、Bot名を後ろにつける(前でもいいよ。/help以外なら)

多分、普通にコマンドに色々書いている気がするのでそうやってほしい!

 

 

<スラッシュコマンドを使わないBotでできる方法>

・スラッシュ以外の記号を使うようにする(スラッシュコマンドは「/」(スラッシュ)しか見なかった気がするので)

・helpコマンドの呼び出しを別名にする(下記のあとがきに書いてある方法)

 

最終的には全部、スラッシュコマンドに対応する気もするので、過渡期のときだけの問題かもしれないなって思ってる。

続きを読む

DiscordでReacji-ChannelerできるBot作って公開した(使ってみて感想ください)

Reacji Channelerとは?

「リアク字」と呼ばれる専用の絵文字リアクションを使用して、パブリックチャンネルから別のチャンネルにメッセージをサクッとコピーできます。 あるチャンネルに投稿された内容が、ワークスペース内の他のチャンネルでの会話にも役立つ場合などに便利な機能

slack.com

june29.jp

 

今回作ったBotの特徴

・Discordのスラッシュコマンドに対応(追加, 削除, 確認)

Botが見えるところなら、プライベートなチャンネルにも対応

環境変数で許可すれば、DiscordのWebhookを転送先として指定可能

・リアクションを何回でも反応するように環境変数で指定可能

・ひとつのリアクションに複数のチャンネルを登録可能

・reacji-channeler(本家)は本人にしか見えないが、このBotは他人にも見える(今のソースがそういう状態にしてあるだけで、Discordのスラッシュコマンドの関数の呼び方で挙動を変えることもできる*1

 

招待リンク

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

*ぜひ、使ってみてください! 処理が重い場合、後述するReplitでクローンして自分専用のやつを作ってみるといいと思います!!

  • Reacji Channelerとは?
  • 今回作ったBotの特徴
  • 挙動について比較
    • 追加
    • DIscord
    • 確認
    • 削除
    • 全削除
    • 動画(Slack)
    • 動画(Discord)

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

Discord-Reacji-Channelerの画像


 

*1:Migration — discord-py-slash-command documentation

にある通り、ctx.sendのパラメータに、hidden = Trueを入れるだけ

続きを読む