見出し画像

チャットコマンド実装

function $(i){return document.getElementById(i)}

function log(t){$('log').innerHTML+=t+'<br>'};

function command(t){
  t=t.match(/[^\/](.*?)$/)[0].split(' ');
  com[t[0]] ?com[t[0]][t[1]] ?com[t.shift()][t.shift()](t) :com[t.shift()](t) :log('no command');
}

var com={
  tell:function(a){log(a+' hello!')},
}

command(t) : チャットコマンド呼び出し
t : チャットテキスト
com : チャットコマンド本体(サブコマンドがある場合はコマンドをオブジェクトにする)

チャットコマンドは/で始まるチャットのテキストを解釈して実行する
実装されるコマンドはcomオブジェクトに格納される
コマンドは階層化される場合がある
階層化されたコマンドは/command subのように/コマンド名 サブコマンド名と書いて呼び出す
サブコマンドがある場合はcomオブジェクトの中にコマンド名のオブジェクト、その中にサブコマンドの関数を記述して実装する

var com={
  commandA:{
    sub:function(args){ }
  },
  commandB:function(args){

  }
}


command関数 : チャットテキストを切り分けて実装されているコマンドを呼び出す

/command arg1 arg2 ...
/command sub arg1 arg2 ...


チャットテキストは/が取り除かれ、空白で区切られた配列に変換される

t=t.match(/[^\/](.*?)$/)[0].split(' ') 



コマンドオブジェクトにチャットコマンドがある場合

com[t[0]] ?A :B


コマンドオブジェクトにチャットコマンドとサブコマンドがある場合

com[t[0]][t[1]] ?A :B


サブコマンドありのチャットコマンドを呼び出し

com[t.shift()][t.shift()](t) 


サブコマンドなしのチャットコマンドを呼び出し

com[t.shift()](t)

チャットコマンドを呼び出す時、残った配列は引数としてチャットコマンドの関数、サブコマンドの関数に受け渡される

この記事が気に入ったらサポートをしてみませんか?