Nr_Narumium【Discord】スクリプトを使ってBot風に自動返信するTweet前回はログ取ったりリアクションをつけたりだけだったので、ちゃんとBOT風の動きができるようにしてみたい。BlogDiscordを普通のアカウントで監視する最近複数のDiscordコミュニティに入り浸ってます。公式のBOT機能を使って面白かったり、便利にしてくれていることも多いです。非公式イベントとか特定の人のアナ...javascript実行まずはHTML書き換えでメッセージを作る。document.querySelector("textarea").innerHTML="test";1document.querySelector("textarea").innerHTML="test";これはDOMを見ると変更されてるが、Discord画面上では変化がない。document.querySelector("textarea").value="test";1document.querySelector("textarea").value="test";しかしウィンドウをクリックする(アクティブにする)と消えてしまう。ページ遷移形でないものはたいていスクリプト制御してるので書き換えは無理そう。入力イベントを発火させてみる(キー入力の偽装)。inputなど組み合わせて試すも変化なし。手動入力したのちに以下を実行する(Enter入力イベント)と投稿できた。13;document.forms[0][2].dispatchEvent(e);イベント自体が阻害されているわけではないみたい。casperjsのログイン自動化で同じようなことがあった気がするので調査。keypressしている。参考にしてあれこれ試すも失敗。最後にmonitorEventsを利用して、実際のkeydownと比較しつつ寄せていく。KeyboardEvent("keyup",opt);document.forms[0][2].dispatchEvent(ev1);document.forms[0][2].dispatchEvent(ev2);左が手動(普通に”a”と打ち込む)、右がスクリプトによる入力。あたりを偽装できればだけどセキュリティ的に無理そう。ブラウザが実行主体で制限しているような気がする。過去に偽装してるものも見つけたけど今は出来なかった。打ち込むのは無理そうなので、1つ上の次元で何とかしてみる。ブラウザの自動操作(casperjs)環境があるので使ってみましたが基本的に監視には向いてないです。これはブラウザ操作とhtml操作のスクリプトが分離しているからです。getHTMLでとってきたDOMはもう変化しませんし、evaluateメソッドで走らせたスクリプトの結果を受け取るのは面倒です。独自メソッドを使って書き直します。start");observe(this);});ログイン等は前回と同じ。waitForメソッドを使って30分間の監視してます。ちなみに実装だけならcasperjsのループ処理で作った方が簡単です。loop(){//差分検出処理if(!isEnd)casper.wait(1000,loop);}loop();処理としては”hoge”と書き込めばhugaと返し、「ぬるぽ」に「ガッ」します。自身の書き込みも拾ってますが前回同様に名前で判定したりして変更できます。書き換えるとボット風の行動が可能ですが、処理を間違えれば連投などでチャンネルやディスコードからBAN食らうかもしれないので気を付けないといけません。用途としては、ちょっとしたチャネル内の独自ゲームとか集計とか。コメントをキャンセルメールアドレスが公開されることはありません。