Worldon: セキュリティアップデート
Worldonを更新しました。 利用されている方はアップデートを推奨します。また、以下の操作を推奨します。
- mikutter上でWorldonを使用して登録されたアカウントをすべて削除
- Mastodonの設定→認証済みアプリからWorldonのものをすべて削除
- mikutter上で改めてアカウント認証
特に、Worldonを入れた状態でmikutterがクラッシュし、次の起動時に表示されるログを送信したり、mastodonやredmine等に貼り付けたことがある人は、上記の操作を行っておいたほうがよいです。
危険性
アカウントとトークンの組み合わせがわかると、以下のことができます。
- 勝手にトゥートする
- 既存フォロー先の非公開トゥートを読める
- あなた宛のダイレクトトゥートを読める
- 勝手にフォローする
トークンは漏れないように注意しましょう。
問題点
world
のuri
にaccess_token
が含まれていたため、バグ報告などのためにログを取ったりして公開すると、意図せずトークンが漏れる可能性がありました。
このため、uri
にaccess_token
を含まないようにする改修を行いました。
この問題は @rinsuki@mstdn.maud.ioさんに指摘していただきました。ありがとうございます。
fcitx-mozcを使う
メモ。
をやる。
をやる。
pgrep fcitx | xargs kill fcitx-autostart
する。
ローマ字テーブルにハイフン→長音を足す。
twemojiプラグインの対応emoji大幅追加
どうも参照していたtwemojiのバージョンが古く*1、最近のemojiに対応できていなかったようなんですね。
でもtwemojiの正規表現のサロゲートペアを復元しながらまたコンバートするのは面倒だったので、今回はFull Emoji List, v11.0とhttps://unicode.org/Public/emoji/11.0/emoji-variation-sequences.txtから自力で正規表現を組むことにしました。
そんなわけでZWJを使った複合emojiや、:thinking_face:のような最近の顔文字も表示できるようになりました。
*1:READMEをちゃんと読めという話
投稿する時のキーによって投稿先を切り替える
例として以下のような挙動を実現する方法を紹介します。
これ以外にも、slackなど任意のWorldを組み合わせることができます。また、Mastodonプラグインとして必ずしもWorldonを使う必要はありません。World対応のプラグインであれば何でもOKです。
手順
- あらかじめTwitterアカウントとMastodonアカウントを追加しておきます。
- portalプラグインをインストールします。
- multiposterプラグインをインストールします。
- アカウントを追加する時に"Portal"が選択できるようになっているので、追加します。Primary WorldをMastodonアカウントに、Secondary WorldをTwitterアカウントに設定します。名前は何でもいいのですが、空欄のままはNGです。
- 設定>ショートカットキーから「追加」します。"postbox"を展開すると"Secondary Worldにポストする(Portal)"というコマンドがあります。これを選択して、キーバインドに
Alt+Enter
を設定して「OK」します。 - 更に「追加」で、"postbox>マルチポストする(Portal)"を選択肢、キーバインドに
Ctrl+Alt+Enter
を設定します。
デフォルトでは「投稿する」がCtrl+Enter
になっていると思いますので、これで3つのキーバインドができました。
注意しなければならないのは、追加したAlt+Enter
やCtrl+Alt+Enter
では返信ツリーを繋ぐ形での返信はできない、ということです。返信する際は、Ctrl+Enter
を使えば、返信先がMastodonのTootならMastodonアカウントが、TwitterのTweetならTwitterアカウントが、自動的に選択されます。
twitter-cardプラグイン
TL;DR
というプラグインを書いたけど、Twitter側はまだいいとして、Worldonと組み合わせてしまうとあまり使い物にはならないね、というだけの話です。
以下、主にプラグイン開発者向けの話。
mikutterにおける引用
↑でも少し触れましたが、mikutter 3.7では引用の処理の仕方が変わったのです。
3.6までは、カスタムModelがquoting_messages
というメソッドを定義して、カスタムModelのArrayを返してやれば、それを引用として表示する、というものでした。
この仕様では、自分が書いたプラグインにいろいろ対応させることはできます。実際、WorldonではtweetのURLには特別に対応し、tootの中にtweetのURLが引用されていれば、それを返すようにしていました。そのため、tweetのURLがmastodonで流れてきていれば、それを引用として表示することができていました。
ところが、「自分が書いたプラグインのモデルを、他のプラグインに引用させる」ことはできないのです*1。TwitterプラグインのカスタムModelであるPlugin::Twitter::Message
というモデルはquoting_messages
メソッドを実装していましたが、Worldonや、そのカスタムModelであるPlugin::Worldon::Status
というモデルのことは知らないので、Plugin::Twitter::Message#quoting_messages
がPlugin::Worldon::Status
を返すことは無いわけです。
西端の放送局、brsywe--mikutterの薄い本制作委員会から参照できる「mikutterの薄い本vol.11」には、intentという機能が紹介されていますが、p.21にhandle
というものについて触れられています。これを使うと、URLとカスタムModelを結びつけることができます。
mikutter 3.7では、このhandle
で定義されるURLとカスタムModelの紐づけを通じて、引用対象を取得するようになりました。
Plugin::Twitter::Message
には、最初からhandle
が定義されていますから、Toot内のTweetは(URLだけ正しくScoreに入れておけば)自動的に引用されるわけです。
Plugin::Worldon::Status
については、handle
を追加する更新を行いました。これにより、Tweet内のTootについても、引用表示されるようになっています。イタコ芸が捗りますね!
これは単にTwitter-Mastodon間の話ではなく、他のあらゆるカスタムModelで、handle
を定義して、timeline: true
にしておけば、引用・被引用が自在になるのです。
そういうわけで
被引用だけがされるモデルを作るなら簡単だろう、という目論見で作ったのが冒頭で紹介したtwitter-cardプラグインです。これは、あらゆるURLに反応し、もしそのURLがOpenGraphProtocolやTwitterCardといったメタ情報の提供規格に沿っていれば、それを引用できるようにカスタムModelとして返す、というものです。
TwitterやMastodonに限らず、(マイクロ)ブログサービスでURLを貼り付けるのは日常茶飯事です。こういったものが多少詳しめに表示されれば、TwitterCardと同様の恩恵を得ることができます。
だが、幸せは長くは続かなかった……
ところでmastodonもOGPに対応しています。つまり、mastodonのユーザーページや単独Tootのページ、ハッシュタグ検索用のURLなどからHTMLを取得すると、OGPの情報が取得できるので、つまりtwitter-cardプラグインのモデルが取得され、それが引用されます。
これが本当に鬱陶しく、特に、リプライ時にいちいち相手のアカウント情報が出たり、ハッシュタグを複数並べるような場合(特にpawooで絵を上げる場合などによくある)、それぞれのハッシュタグごとにコレが出てしまうわけです。しかも大した情報があるわけでもない。これは厳しい。
Twitter側と同様に、timeline: false
なHashTagのようなモデルを作って返せばいい、はずなのですが、別の問題(https://dev.mikutter.hachune.net/issues/1226)があり、一筋縄ではいかないようです。
*1:もちろんモンキーパッチすればできましたが、Worldonではそれはやりませんでした。