はじめに
「PADの導入方法」「変数の基礎知識」「要素の選択とテキストの入力」「サブフロー」などの基礎知識がある事を前提にすすめます。
前提知識はこちらをご覧ください。
確実に「半角」で入力されるようにする
まず、文字入力は「ひらがな」や「全角」になると崩れます。
そして、1回でも入力先を開いて「ひらがな」にした状態でPADを動かすと…
その「ひらがな」状態の記録が読み込まれてしまいます。
なので、入力先のウインドウを開いた後…
確実に「半角」の状態で入力されるような操作を入れる必要があります。
具体的には下図のような操作です。
↑この操作を作っていきます。
入力ダイアログでメイン画面にマウスを移動させる
「A/あ」のクリック位置指定は「ウインドウの UI 要素をクリック」を使う必要があります。
(要素がWeb上に無い + Tabキーで選択がほぼ不可能なので)
そして、Windows 10では複数ディスプレイを使と「A/あ」の変換ボタンがメインの画面にしか出ない性質があります。
さらに、クリック位置の指定(UI 要素の選択)はこの2以上のディスプレイを区別する情報を設定できません。
なので、2つ以上のディスプレイがある環境で、ディスプレイの区別が無い「UI の要素を指定」を実行した場合は…
実行した時に「マウスが乗ってた画面」に、処理が実行されます。
なので、マウス位置が悪い(メイン画面以外の場所にある)と処理が止まります。
この画面差問題に最も有効だと思う解決法が「入力ダイアログ」などの表示です。
入力ダイアログ表示ようなポップアップ系の機能は「A/あ」のボタンがある「メイン画面」に必ず出るようです。
なので「ポップアップをクリックさせる」+「それ以降、マウスを動かさない」ようにすれば、この問題が解決します。
1環境で20何回ぐらい試して「A/あ」の所に出ただけなので…
もしかしたら例外があるかもしれません。
クリックさせる用のポップアップは下図のように設定。
(「マウスを動かすのはNG」という説明も入れるとより親切)
以上が、入力ダイアログでメイン画面にマウスを移動させるの解説です。
「入力をブロック」というマウスの操作を強制的に止めれそうな機能がありましたが…
こちらは設定してもマウスは動き、画面差問題が発生しました。
やはり「動かさないで」と表示するのが一番理想。
確実に「半角」になる設定を作る
画面差問題の対処法ができたら…
「A/あ」ボタンを操作して確実に「半角」になる設定を作ります。
これは、「ウインドウの UI 要素をクリック」で設定できます。
下図のようなクリック処理を設定していきます。
クリックの場所は 「UI:要素」 → 「UIの要素を追加」を選択。
Ctrl+クリックで選択できます。
右クリックしないと出ない場所は右クリック → 右クリックを送信で表示できます。
あとは、必要な場所をCtrl+クリックで追加。
そして、右と左のクリックを設定。
以上で、確実に「半角」になる設定が完成です。
ここまでの処理をサブフローにまとめる
ここまでの処理ができましたら「サブフローを追加」で処理をまとめます。
Mainフローに合った処理はShift+クリックで複数選択。
Ctrl+Xで切り取り → サブフローを開きCtrl+Vでサブフローに移植できます。
あとは、Mainフローにこのサブフローを呼び出す処理を作ります。
入力するWEBサイトが1つだけなら、サブフローにするメリットは少ないです。
が、複数のWEBサイトに文字を入れる場合、2行だけの処理でもサブフローで読み込めるすると後々、快適に過ごせます。
たまに画面が最大化してるとバグるので注意
たまに画面が最大化してると、右下のこのボタンが出なくなります。
なので… 「エラー発生時」の挙動を決めておくと安全です。
フローを実行し続けるようにしてください。
このエラーが発生した場合、この「2」の所で処理が止まります。
なので、処理を止めずに進める事ができます。
「ひらがな」や「全角」入力されれば止まるのですが…
ダメだった時、運が良ければそのまま上手く行くようにするための処理程度のモノと思ってください。
以上が、確実に半角入力するための処理です。
Discordに文字を入れる
テキストを入れる場所を選択する(要素の選択)
追記:これやらなくても普通にWEB立ち上げ → キー送信で文字が入りました。
この処理は不要です。
PADは開いたWEBブラウザを指定して処理を入れる機能を使えます。
なので、アプリよりWEBを使う方が要素を選択系の動作が安定します。
そこでWEBを立ち上げ → 「WEB版 Discord」を使って文字を入れる事にします。
↓のページにアクセスし、Discordにログイン。
そして、必要であればログイン。
→ 「Discordをブラウザで開く」を選択。
WEB版Discordで文字を入れたいチャンネルを選択。
すると、そのチャンネルのURLが表示されます。
こちらを選択 → Ctrl+Cでコピー。
このURLを、WEB立ち上げの「初期 URL:」に設定。
あとは、変数名をWEBサイトの名前などに設定。(%Discord%)
この状態で保存。
あとは、ブラウザー自動化 → WEBフォーム入力を開きます。
2行以上の文字を入れるなら「Webページ上のテキストフィールドをフォーカス」を選択。
1行だけなら「Webページ内のテキストフィールドに入力する」を選択。
ブラウザインスタンスで、開く予定のWEBサイトの変数を設定。
UI要素: → 「UI要素を追加」を選択。
そして、テキスト入力欄のCtrl+クリック。
これで、テキストを入れる場所を選択する処理が完成です。
…が、この方法はマウス位置で微妙に挙動が変わります。
そして、Ctrl+クリックのアタリ所が悪いと動かない事があります。
なので、次はUI 要素が正しく動くか確認します。
UI 要素が正しく動くか確認する
UI要素の動作確認は、下記の手順でできます。
→ 画面右上の2つ目のボタンを選択
→ Webとかかれた大枠をクリックして開いて
→ 設定した要素を開いてクリック
→ Enterキーで編集に入る
すると、下図のようなレシートが表示されます。
重要なのはコレの下部分です。
ここに、もし「Class= “c*****” 」や「Id= “list-item-2674” 」のような表示があれば消してください。(右側の「属性」にあるチェックを解除などで消せます)
たまに、ClassやIdといったランダム値が入ることがあるようです。
これがあると、動かなくなるようです。
私はまだ再現できてないので説明できませんが…
↓こちらの記事で確認+消し方が学べます。
問題が無さそうであれば「テスト」を選択。
Web Discordを立ち上げ → チャンネルを開いた状態にします。
Web ブラウザータブでそのDiscordを選択 → 「OK」で確定。
すると、一瞬赤い表示が出ます。
これが、意図した所に出ればほぼ成功です。
上手く行ってる場合は、緑のチェックが出ます。
この緑のチェックは、この処理は高確率で止まらず、安定して動く可能性が高いことを意味します。
これが出れば「UI 要素が正しく動くか確認する」肯定が完了です。
2行以上の場合は、キーの送信でテキスト情報を送る
入力する文字列が1行の場合は「Webページ内のテキスト フィールドに入力する」を使います。
こちらは設定が凄く簡単ですが、改行が使えないのであまり使わないです。
なので、解説は省きます。
2行以上の文字は「フォーカス」 → 「キーの送信」で入力できます。
フォーカス(要素の選択)はもう作ったので、次はキー入力を作ります。
「キーを送信」を追加し下記のように設定。
・キーの送信先:
→ 「ウインドウのインスタンス/バンドル」を選択。
(Webサイトが入力先なので)
・ウインドウインスタンス:
→ 開いてるWEBサイトの変数を設定。
(この記事の場合は「%Discord%」)
・送信するテキスト:
→ 自由に送りたい文字を設定
(Discordは普通の改行が使えないので注意)
・テキストをハードウェアキーとして送信します:の「チェックを解除」
→ ハードウェアーキーに日本語の文字はないのでエラーが出る
→ なので、日本語の文字を入力する場合はチェックを解除する
Discordの改行は「{shift}({Return})」と書く必要があります。
これが、Discordにテキストを入力する上での最も大きな注意点。
PADのキー送信は「改行 = Enterキーの入力」として扱われます。
そして、DiscordはEnterキーで送信します。
なので、改行すると途中で文章が送られます。
Discordで改行するには「Shift+Enterキー」の入力が必要です。
このShift+を表すのが「{Shift}()」です。
あとは、Enterキーは{Return}という表記に変換されます。
この2つを組み合わせて、{Shift}({Return})にすると「Shift+Enterキー」の入力処理が作れます。
この入力はショートカットキーですが…
テキストをハードウェアキーとして送信します:の「チェックを解除」状態でも動きました。
【↓Discordでの改行の例↓】
ここに{Shift({Return})}メッセージを{Shift({Return})}入力
あとは、WEB立ち上げ後に半角変換を入れます。
ドラッグ&ドロップで移動可能。
これで “開いたサイト上” で確実に半角入力に修正できます。
あとは、実行して動作を確認。
問題が無ければ、Discordに文字を入れる処理が完成です。
以上が、2行以上の文字を入れる方法です。
別のチャンネルにも文字を入れる
次は、別のチャンネルに文字を入れる方法を紹介します。
色々ありますが… 一番確実なのは一度閉じる → 開きなおす方法です。
開いてるウインドウを閉じる処理は「Ctrl+Wキー」 → {Control}(w)で入力できます。
ショートカットキー操作なのでハードウェアーキーを有効化にして設定。
つぎに、別のチャンネルを開き、URLを選択。
→ Ctrl+Cキーでコピー。
そして、Ctrl+Wで閉じた後にブラウザを立ち上げを追加。
後で試した所、同じ変数名で2画面起動 → Ctrl+Wで閉じなくても… 動きました。
が、安定性を考えると一度閉じるか、同時起動するなら別の変数名にする事をおすすめします。
初期URL:に、先ほどコピーしたURLをCtrl+Vキーで貼り付け。
必要な方は変数名も変更。
あとは、テキスト入力欄を選択 → 入力テキストを設定する処理をコピーペーストで複製します。
テキスト入力欄を取得する「Div”にフォーカスする」は、チャンネルは違いますがテキスト入力欄という点では同じなので、使いまわせます。
↑この状態で実行。
すると、別のチャンネルにもテキストが入ります。
以上が別のチャンネルにも文字を入れる方法です。
基本的な入力は方法の解説はこれで終わりです。
あとは… 実践的な入力例を紹介し、関連する役立つテクニックを解説します。
実例:VRChatのイベント告知文を入力する
Discord向けの、私が開いているVRChatのイベント告知文章を作っていきます。
上級者向けなので、解説は飛ばし気味で進めます。
(ここは、記事の「おまけ:」のようなモノと思ってください)
入力ダイアログで開催回数を取得する
まず、入力ダイアログの所の質問を「回数は?」に設定。
あとは「半角で入力」と「OKをマウスクリック」するという注意書きを入れます。
+「マウスを動かさない」という注意書きもあるとより親切です。
そして、このイベント回数を「%Number%」という変数で取れるようにします。
これは後で、【第n回】~~~~のような表示で使います。
【第n回】~~~~ → 【第%Number%回】~~~~
以上が、入力ダイアログで開催回数を取得する設定です。
曜日を予測入力+質問する
まず、曜日の取得関係の知識がある事を前提に進めます。
前提知識は↓をご覧ください。
私の開いてるイベントは、平日+開催日をズラすよう+6日間隔で開いてます。
月曜日の場合は金曜日にも開催してます。
そして、イベント開催日に次回の告知をする事が多いです。
なので、イベント開催日に合わせて次回の日付が予測入力される処理を作ります。
↑の開催条件をまとめると下記。
・月曜日以外
→ +6日
・月曜日
→ +4日
基本「+6日」月曜日だけ「+6 -2日」する。
【普通の書き方は下記】
もし月曜日以外なら → 6日
もし月曜日なら → 4日
ただ、2回if分を入れるのが嫌だったので、
基本「+6日」月曜日だけ「+6 -2日」と書きました。
これを「if」を使って下記のように書きました。
あとは現在の日時を取得 → 日付の選択ダイアログを表示で最終確認。
日付の選択ダイアログの情報から「年、月、日、曜日」の変数を取得。
これで、イベント開催日に告知をすれば正しい曜日が自動で入るようになります。
もし1日寝過ごしたり、予定が合って告知できなくても、
このダイアログ表示から入力すれば、調整が効きます。
以上が、曜日を予測入力+質問する処理です。
処理を途中で止めて動作を確認
フローの左側をクリック。
すると、赤い丸が出てきます。
これは「ピン留め」のようなモノです。
これを入れて実行すると、ここで処理が強制的に止まります。
↓この状態で実行。
回数や曜日を入力。
そして… 赤い丸がある場所にきました。
ここで「ステータス:一時停止」になります。
もう一度「▷」ボタンを押すと、一時停止が解除されて動きます。
これは前半の処理を確認したい時に便利。
ここでは、実際の処理の前に一時停止を入れて、変数が正しく入ってるかを確認しました。
ちなみに、日時の取得 → 「現在の日付のみ」にすると「時間:分:秒」の情報が消えます。
あと、イベント日の変数を「%Current_Input%」としてましたが…
「%Day_Input%」の方が英語として適切と思い、変数の名前を変えました。
(1つ1つ手入力)
以上が、処理を途中で止めて動作を確認する方法です。
ユーザーが変数を設定する場所を作る
あとは… イベント開催時刻や終了時刻などは基本同じです。
が、たまに変わる事があると思います。
そんな時に、1回1回打ち直すと面倒です。
そこで「ユーザー変数」のサブフローを作りました。
この中で、変わる可能性があるモノをまとめて変数設定します。
//ーーーーー
↓ここでは「イベント開催時刻(時間 / 分)」と「イベント終了時刻(時間 / 分)」
そして、イベント告知用ツイートをユーザー入力で取得。
この5つの要素の変数を設定できるようにしました。
入力ダイアログから入力されたTwitterのURLは「%Twitter_URL%」という変数で管理。
以上が、ユーザーが変数を設定する場所を作るの説明です。
処理を途中から実行して動作を確認
フローは右クリック → 「ここから実行」で途中から実行できます。
サブフローで「ここから実行」を使った場合、そのサブフローの中だけ実行されます。
そしたら「ユーザー変数」が正しく動くかを試します。
一番上の要素で「ここからを実行」を選択。
適当なURLの代わりの文章を打ち込み。
あとは右側の所で変数を確認。
問題が無さそうであれば、処理を途中から実行して動作を確認する処理が完了です。
変数を使って思い通りのテキストを入力する
Discordに文字を書く処理を「Discord」というサブフローを作りまとめました。
この、フォーカス後の「キーの送信」の内容を調整します。
ちょっとわかりにくいですが…
↓のような曜日系で作った変数を入れて書くと処理に合あった曜日などが自動入力されます。
こちらは普通のテキストなので、ハードウェアキーとして送信を解除。
途中で{Shift}({Return})が入ってるのがポイント。
これが、Discordでの改行入力です。
2番目のテキストは下記のように入力しました。
(これだと正しく動かないので注意。)
これは、reminder-botの操作に合わせた入力を意識したつもりです。
が、正しく動きませんでした。
次の項目は、この動作確認や↑のテキストを正しく動かすために必要だった設定を紹介します。
あとは実行して動作を確認 → 試行錯誤して調整
↓Mainフローでサブフローに分けた処理を呼び出せる形にします。
この状態で実行。
適当な告知URL、その他のポップアップ要素を打ち込み。
すると… 1つ目のテキストは上手く行きました。
(改行だけなので、簡単です)
そして、2つ目の入力は「Reminder-Bot」の構文になるように入力しようとしました。
が… 上手くいきませんでした。
ここで、エラーの原因を一番素早く見つける方法は、上手くいかなかった所の入力を1文字1文字手入力で追っていく事です。
1つ1つ入力すると、入力中に、上手くいかなかった操作に気づきます。
次は、その操作を修正するための操作を試行錯誤して見つけます。
別の操作が見つかれば、そちらに置き換え。
これで、エラーの原因を取り除けます。
例として「Tab」や「Shift+Tab」や「Enter」キーなどを上手く使うと、
意図した操作が作れる可能性が高いです。
あと、上手く行った箇所の実行が不要であれば右クリック。
「アクションを無効化する」で実行すると、その処理分の時間を節約できます。
色々試した結果、キー入力の間隔の遅延:を10 → 60に変えると治ることが分かりました。
↓ある程度、このようなバグの原因を想像する力や慣れが必要です。
原因は、Reminder-Botの入力はDiscordのテキスト入力欄で「time [****]」のような “枠” を生成します。
この枠は「ある文章を入力 → その後{Return}や{Tab}キーを入力」などで作れます。
が、この”枠”生成は少し時間がかかる処理のようです。
そして、キー入力間隔の遅延が「10(ミリ秒)」だと入力が速すぎました。
結果、 “枠” が作られる前に文字が入って、テキストが崩れてたようです。
なので、テキストの入力間隔を落とし “枠” の生成を待てるようにしました。
すると、治りました。
問題が無ければ、EnterキーでBotが正しく動くかを確認。
動きました。
あとは、動かして全ての動作を確認。
問題が無さそうであれば、お好みで「{Return}の送信」や「{Control}(w)の閉じる」といった決定的な操作を入れます。
以上が、PADでDiscordに文字を自動入力し送信する処理が完成です。
まとめ
今回はDiscordに文字を自動入力し送信する方法を紹介しました。
・半角入力でないとテキストが正しく送れないので注意
・まず、確実に半角入力になる処理を作る
・文字入れは要素のフォーカス → 「キーの送信」が基本
・Discordは改行が「Shift+Enter」キーなので注意
・キーの送信でのShift+Enterキーは「{Shift}({Return})」と書く
また、他にもPAD関連の情報を発信してます。
ぜひ、こちらもご覧ください。
コメント