注意: このページは最後に更新されてから 1243 日が経過している記事です。 文章が腐敗している可能性があります。その点を考慮した上で確認ください。

IRCBot

提供: kimoto's wiki

  • 作ってるIRCBotについてのメモ
  • 自分用のマニュアルみたいな感じにしたい

Version

  • 1.0
    • 普通にひどいコード
  • 2.0
    • 全部書きなおしてコア部分以外はプラグイン方式にした
    • それとI/Oインターフェースみたいな抽象層を作ったため、IRCでなくても動くようになった。現状だとIRCとREPLのみ。REPLのおかげでだいぶデバッグしやすくなった。
    • 今後予定してるのはWEBインターフェース。これも多分すぐ出来る。HTML5+JS予定
      • WEBインターフェースは危険なのでcode freeze中

MileStone

  • 2.5
    • お休みモード (夜の一定の時間だけ発言しないとかそういうの)
    • DOS Detector完全版 (ちゃんとメッセージ受け取った順に処理する)
      • 賢い追従機能 (これは仕様非公開)
  • 3.0
    • Pluginを誰でも作れるようにする
    • IRC Gateway機能
    • RSS Reader機能
    • 全部のプラグインをregister_command方式にする
      • ヘルプを自動で出せるように
      • 一部コマンドがO(1)でアクセスできるようになるため高速化?

System Commands

基本的にこれらのコマンドは admin しか使えません

  • !version
    • 現在のobamaのバージョンを確認
  • !load <プラグイン名>
    • 指定したプラグインを読み込みます (既に読み込まれてるの指定したら再読込される)
  • !reload <プラグイン名>
    • 正直!loadと同じ。!loadでも再読込されるので
  • !unload <プラグイン名>
    • 指定したプラグインを外す。無効化出来る
  • !plugins
    • プラグインの一覧を表示します
  • p <Rubyコード>
    • Obama::Coreのコンテキストで任意のコードを実行出来ます (デバッグ用)
  • eval <Rubyコード>
    • Obama::Coreのコンテキストで任意のコードを実行出来ます (デバッグ用)
  • obama 全指示を無視
    • って言うと全指示を無視するようになる (Attackされた時とかに使う)
  • obama 再開
    • っていうと指示無視モードが解除されて普通に受け答えするようになる
  • !quickhack コード
    • 次回起動時に自動実行されるコードをかける
    • !quickpatch とかのがいいかも? !patch とか
    • あとこれ書いた瞬間にも実行されたほうがいいなー

User Commands

  • lleval プラグイン (プログラムコードを気軽に実行できます)
    • !lleval <言語名> <プログラムコード>
      • 指定したプログラミング言語でプログラムコードを実行し、その結果を表示します
    • !ruby <プログラムコード>
      • 気軽にRuby使うために作ったやつ
    • !perl <プログラムコード>
      • 気軽にPerl使うために作ったやつ
    • say <プログラムコード>
      • 気軽にPerl使うために作ったやつ
  • repeat プラグイン
    • repeat <N> <文字列>
      • 指定した文字列をN回表示します

Obama::Plugin::Vi

  • 通常時
    • vi ./ファイル名
      • ファイルを開いて編集開始します。
    • cat ./ファイル名
      • ファイルの中身を表示します
  • ファイルオープン時
    •  :wq
      • ファイルを保存して閉じます
    •  :q
      • ファイルを保存しないで閉じます

Obama::Plugin::UrlFetcher

  • URLを検知してそのURLの詳細を表示する、という目的の機能
  • 特徴
    • HTTPステータスコードによって文字色を変更する

Obama::Plugin::Det

  • determinant(行列式)の問題を出してくる機能
  • obama: 回答である数字 とすることで、obamaに正解かどうかを問い合わせることが出来る。

Obama::Plugin::Dictionary

  • キーワード登録機能
  • ユーザーが文章入力した時に、事前に登録したキーワードの詳細を教えてくれる。
  • dictで登録済み一覧、dict delete <keyword>で削除だった気がする

Obama::Plugin::Todo

  • todo <タスク名>
    • とすることでtodo追加
  • todo list
    • でtodoリスト一覧を表示
  • done <タスク名>
    • で終了


Commandline Utils

  • デバッグしやすいように色々作り始めた
  • 基本度のコマンドも --debug ってつけるとデバッグ用ログが表示されるようになる
  • ./bin/repl.rb
    • いわゆるrepl。デフォルトだとすべてのプラグインを読み込む
  • ./bin/driver.rb -p <プラグイン名> <文字列>
    • 指定したプラグインに文字列を送った時にどういう反応するかだけをテストできる test driver
    • さっき作ったばかりだけどかなり便利な気がする(まだ作ってない)
  • ./bin/client.rb <設定ファイル.yaml>
    • IRCに接続します

Other

  • ダメだここまで書いて飽きた。暇な時に追記します。

Idea

  • アイデアのメモ
  • mod_dosdetector的なのを作る (実装済み)
    • 指定時間内に特定のユーザーがN回発言したらその人をアウトとしたり、
    • 指定時間内にユーザー関係なく有効な指示をN回送ってくる人が居たら、全員からの指示を無視するとかそういう複数種類のBAN方針を取りたい
    • またユーザー名(nickとかホスト名)でBANできるようにしたい
      • ただユーザー名をアトランダムに変更するbotが居たら対処できないので、ユーザー名経脳を追尾する機能とかもつけるとか。
  • vi編集機能 (実装済み)
    • !vi ./ファイル名
    • でファイル開いて、
    • j3 とか t, とかで移動できるようにする (だれでも) みたいな機能
    • 面白そう
  • インスタンスを増やす / 減らす
    • 機能制限した自身の子プロセスをforkできるようにする
    • !hire で 一人増えて
    • !fire で 一人解雇みたいな感じ
    • 役割かぶってても面白くないし、だいぶ機能制限したいと思う
    • プロセス間通信みたいな感じで、IRCのテキスト上でプロトコルをJSONで実現すると、相互に通信し始めて面白いんじゃないかな。
    • 流量制限プラグインを強化して、自分自身を大量にforkしてチャンネルにjoinさせても破綻しないような実装をするというのもすごく美しいかも。
  • 祭り機能
    • otaku1-5みたいな感じのユーザーが沢山ジョインしてきて、祭りをしてそのままleaveしていくというネタ
  • 人狼機能
    • 人狼を始めるbotがたくさんjoinしてきて人狼を始めて帰るという機能