ふるつき

v(*'='*)v かに

今の所判明しているシェル芸botの仕様

Twitterルール:特定の人物や他の利用者を標的とした嫌がらせを禁じます。Twitterは、嫌がらせ、威圧、他者の発言に対する抑制を攻撃的な行為と見なします。

https://help.twitter.com/ja/rules-and-policies/abusive-behavior

わかんないよ

ここにすべてを置いてきた

github.com

github.com

シェル芸botで使用しているdocker イメージはこちら。一応dailyで更新されています。

hub.docker.com

基本仕様

#シェル芸 #危険シェル芸 #shellgei というタグのツイート(以下シェル芸ツイート)をシェルスクリプトとして解釈し、標準出力を140字程度に切り詰めて返す。なお、このとき @minyoruminyon という先頭のメンションとトリガーとなっているタグは削除された状態で解釈される。

ときどきこれ以外のハッシュタグもサポートしていて、いまは #ゆるシェル がそうだし昔は #新春シェル芸 がそうだった。

運営は私 @theoremoon だけど、いまは @ryuichiueda 先生にサーバ借りてそちらで動かしています。ありがたい……。

運営が私なので欲しいコマンドとか機能とかがあったら伝えてくれると実装したい。とうぜん Pull-req でもよい。

制限

当然いろんな制限がある。

  • 一回のシェル芸が終わると環境がリセットされる
  • ネットワークインターフェースは loopback しかもってない
  • 実行時間は最大20秒(時々変わるけど、これ以上長くすることはあまりない)
  • 自分自身のシェル芸を実行することはない
  • シェル芸botがフォローしているユーザのシェル芸のみを実行する
  • シェル芸のトリガーとなっているタグは削除した状態で実行される
  • シェルスクリプトとして返すステータスコードが0でないとだめ
  • 出力が15 で切り詰められる

シェル芸チェーン

2018年4月ごろ登場(多分)

シェル芸ツイートが引用ツイートの形であるとき、その引用ツイートの内容に続けて、シェル芸ツイートの内容を含めたものをシェルスクリプトとする。何回も連鎖ができる。

以下例

画像ツイート

2018-7-13 登場

/images に画像ファイルをおくとその画像をツイートに付与する。一枚だけしか対応してない。2018/11/27あたりに複数枚の画像に対応しました。多分辞書順に先頭4つが選ばれます。

以下例

2019-05-14 更新 このプルリクエストで表現できる画像の幅が広がりました

shebang 対応

いままでサボっていたんですが、shebangに対応しました。shebangなしだとbashスクリプトとして扱われます。

@shellgeibot

@shellgeibot という シェル芸bot よりもそれらしいアカウントが存在する。もともとはシェル芸botへの新機能の追加時にデバッグ用途で取得したアカウントだったんですが、適当な運用をしていたら鍵アカウントなのに follow request が来てしまって、いい機会なので公開したという経緯がある。

現在(2018/08/16)は twitter の UserStreams 廃止に伴って statuses/filter を用いた新しい(?) シェル芸bot のテストアカウントになっている (https://github.com/theoremoon/ShellGeiBot/tree/a3f35b47bd51075c56c3b08f7933258f89d98827)。 こちらもフォローしてフォローバックされていることが前提条件で、その上で #シェル芸 または #shellgei_test タグ付随のツイートをすることで発火する。

本家の@minyoruinyonが statuses/filterを用いる方式を採用したので、@shellgeibotは実験時を除いて停止しています。

本当にどうでもいい日記みたいなことだけど、 この機能を搭載した ShellGeiBot を 手元の arch マシンでビルドしたところ、 シェル芸botが動いている ubuntu では動かないELFができてしまった(GLIBC_2.28 が ubuntu にはまだ来てなくて、 arch ではこっちに依存してしまったのが問題らしい)。 こういうところで道を間違えるのが得意なので、 シェル芸botのビルドのために CircleCI を導入した。

画像取り込み

画像じゃなくてもいいんだけど、シェル芸タグのツイートに添付してある画像や映像を/media以下に取り込むようになりました。副作用的に、今までは画像付きのツイートはその画像のリンクが含まれているのでシェル芸botからも投稿しているように見えていたんだけど、これはできなくなりました。

一応例です。

CHANGELOG.txt

  • 2018-08-16 statuses/filter に対応した filter.json ブランチを作った。 @shellgeibot で運用している
  • 2018-07-13 画像付きツイートの機能を追加
  • 2018-11-27 画像を最大4枚までツイートできるようになった
  • 2019-01-13 shebang対応
  • 2019-05-14 unko.ls などがURLとして解釈(https://t.co/hogepiyo)されてしまいうまく動かない問題への対応
  • 2019-05-25 シェル芸bot本体と、docker imageを分離
  • 2019-06-27 メディアを取り込むようになった
  • 2019-07-12 自分自身のシェル芸は実行しないなどを追記
  • 2020-01-?? #shellgei タグに対応
  • 2020-01-29 出力の切り詰めを 100Kバイトから 15行に変更(あまりに yes が横行したため)
  • 2020-11-09 コンテナランタイムにgVisor(runsc)を使用するようになった
  • 2022-??-?? 自動フォローバックを開始しました。シェル芸botのアカウントをフォローしてから30日が経過したユーザをフォローバックします
  • 2023-03-18 なんか急に/status/filter.json から403が返ってくるようになってしまったので直しました。リアルタイム性がうしなわれた… https://github.com/theoremoon/ShellgeiBot/commit/1f0097fc8d921adf368950de8ad1f1a5ca6f5e44

あと

なんか忘れていることがあれば教えてください