DCSS webtileチャットボットbeemの紹介
この記事はRoguelike Advent Calendar 2019の1日目の記事です。
DCSS webtileチャットボットbeem
現在私が運営しているDungeon Crawl Stone Soupサーバーに先日からチャットボット機能が付いたので紹介いたします。
付いたと言っても、私自身がボットを運用しているわけではないのですが……(本家開発チームのgammafunk氏が運用しています)
特定の手順を踏むことによって通常のチャットにbeemというユーザーが常駐するようになり、コマンドを送ることによってプレイに役立つ情報を得たり、特に役立たないメッセージを得たりします。
常駐のさせ方
まず、beemが既に常駐しているユーザーのプレイを観戦し、チャット欄に
!subscribe
と入力することで自分のプレイ時に常駐させることができます。
beemが常駐している状態で、
!unsubscribe
と入力すると、常駐設定を取り消すことができます。
……はて、常駐しているプレイヤーがいないと常駐させることができないのならば、最初に常駐させた人はどうやって常駐させたのでしょうか?
という疑問が湧いてくるところですが、beemがチャットに入ってくる条件はもう一つあります。
beemは(通常設定では)4人以上観戦者が入っているゲームを「賑わっている」と判断して自動的に観戦開始します。そのチャンネルに入って!subscribeを入力し、改めて自分のプレイを開始しましょう。
botのコマンドいろいろ
IRCやDiscordの公式チャンネルにいるbotとほぼ共通のコマンドが使用できるようです。
!help
beemの簡単な自己紹介を表示し、説明書へのリンクを張ります。
??[文字列]
LearnDBに登録された項目を表示します。例えば、
??sigmund beem: sigmund[1/4]: A yellow @ with a shiny scythe, a magic wand, and a necklace of player skulls. A notoriously lethal early-game unique human wizard. Spells: throw flame, confuse, invisibility, magic dart.
複数個文章が投稿されているワードについてはデフォルトでは一番最初のものを表示します。
項目番号を指定したい場合は以下のようにします。
??sigmund[4] beem: sigmund[4/4]: Proof that Crawl hates you and wants you to die.
@??[モンスター英名]
モンスターの情報を出します。例:
@??the royal jelly beem: Royal Jelly (J) | Spd: 14 | HD: 21 | HP: 196-273 | AC/EV: 8/4 | Dam: 50(acid:7d3), 30(acid:7d3) | eats doors, see invisible, unbreathing | Res: magic(180), poison, acid+++, blind, drown | Vul: silver | XP: 14306 | Sz: Large | Int: brainless.
接頭辞を%??にすると、Cheibriadosボットで処理を行うようになります。文字列が変わらないこともあります。
Cheibriadosボットでは、バージョンを指定して情報を出すこともできます。
%0.15?cigotuvi's monster beem: royal jelly (J) | Spd: 14 | HD: 21 | HP: 230 | AC/EV: 8/4 | Dam: 50(acid:7d3), 30(acid:7d3) | eats items, sense invisible | Res: magic(196), poison, acid+++, asphyx, drown | Vul: silver | XP: 14176 | Sz: Medium | Int: plant.
!lg
一つ前のゲーム(Last Game)の情報を出します。
!lm
最後に表示されたmilestone表示を出します。
!won [プレイヤー名]
[プレイヤー名]の脱出した回数や組み合わせを出力します。
プレイヤー名を省略した場合は、今プレイ中のプレイヤーの情報を出します。
!gamesby [プレイヤー名]
[プレイヤー名]のゲームプレイ情報を出します。(最高スコア、累計スコアなど)
プレイヤー名を省略した場合は、今プレイ中のプレイヤーの情報を出します。
!apt [種族名]
[種族名]のスキル適性を出力します。
%git [コミットidやブランチ名]
DCSSのgitリポジトリにおけるコミットの情報を出します。例:
%git 0a147b9 beem: gammafunk * 0.17-a0-488-g0a147b9: A new wizlab: Lehudib's Moon Base (5 years ago, 8 files, 203+ 1-) https://github.com/crawl/crawl.git/commit/0a147b9ce386 %git stone_soup-0.24 beem: Aidan Holm * 0.24.0-37-gcf1ca85: Fix various small alignment issues (10 days ago, 2 files, 8+ 2-) https://github.com/crawl/crawl.git/commit/cf1ca852f132
!firestorm [文字列]
[プレイヤー名] points at [文字列] and mumbles some strange words. A raging storm of fire appears! The great blast of fire engulfs [文字列]!というメッセージを返します。単なるジョークコマンドです。
ゲームプレイヤーだけに反応するようにする
万一観客がbotのコマンドで荒らし行為を行ってきたときなどは、以下のコマンドでプレイヤーのみに反応するようにできます。
!player-only on
解除するときは
!player-only off
とします。