はじめに
PADやDiscordの基礎知識などがある事を前提に進めます。
前提知識はこちらをご覧ください。
立ち位置的には↓の記事の続きになります。
Discordのテキスト入力より先に、イベント登録を自動化しようと思う人は少ないと思うので…
先にDiscordで普通のテキスト入力を経験してる事を前提に書いてます。
なので、テキストは半角じゃないと正しく入らないなどの
基礎的な事は軽く触れてますが… 大幅に省略してます。
WEBブラウザを立ち上げる
ここでは、Discordのイベント登録用の処理をサブフローにまとめる事にしました。
まずは「Dicord_イベント」というサブフローを作成。
下記のURLにログインし、WEB版Discordを立ち上げ。
PADはWEBの方が操作が安定しやすいので、WEB版Discordを使います。
そして、 “どこでも良いので” イベントを追加したいサーバー → サーバーのチャンネルを選択。
ここのURLをコピー。
そして、新しいブラウザを起動するの「初期URL」に指定。
ブラウザを表す変数を「%Discord_Event%」などに設定。
そして、この処理をクリックで選択。
Alt+F5で実行。
問題無く、WEBサイトが立ち上がれば、ブラウザ立ち上げ処理が完了です。
イベント作成画面を起動する
Discordのイベントは、左上の所で追加できます。
これは… 「Tabキー」連打だと選択が入りませんでした。
なので「WEBページのボタンを押します」で選択します。
ブラウザーインスタンの変数を指定。(%Discord_Event%)
そして、UI要素の空白をクリック。
「UI要素の追加」を選択。
Ctrl+クリックで「イベント」の所を選択。
この状態で1からAlt+F5で実行。
動作確認。
問題が無ければ、イベント作成画面が出ます。
こちらも… この記事では「ボタンを押します」で選択してます。
ボタン選択を追加。
そして「イベント作成」を選択。
1からAlt+F5で実行。
問題が無ければ、イベント作成画面の起動が完了です。
//ーーーーー
この時は「Tabキー」 → 「Shift+Tabキー」 → 「Enterキー」の入力で選択できる事に気づいてませんでした。こちらでも、大丈夫です。
少しでも安定させたい、UI要素を使う場面を減らしたいという方は…
このキー入力を設定してください。
キー入力でイベントの場所を指定する
イベント作成画面はまず「ボイスチャンネル」or「場所」を質問されます。
9割の用途は「他の場所」だと思うので、こちらを選択する処理を紹介します。
ボイスチャンネルの場合、事前に通話用のチャンネルを作成。
Tabキー3回 → Enterキー → Tabキー → 下矢印 → Enterキーで選択できます。
(微妙にTabキーの入力回数がズレてたら、ごめんなさい。)
「他の場所」はTabキー4回 → Enterキーで設定できます。
なので、このキー入力を追加。
場所指定は「ボタン選択」を使わない方が良い
場所の指定は「ボタン選択」でもできそうですが…
1つでもイベントが入ってるとバグりました。
なので、キー入力で指定した方が良いです。
具体的には、ボタン選択だと「他の場所」を選択する画面で…
何故か「イベントの詳細情報」が出るようになりました。
なので、他の場所指定はキー入力で行ってください。
たぶん、裏側で開かれいる「ボタンの名前」が干渉したのだと思います。
場所のテキストを打ち込む
Discordは他の場所入力後、自動で文字が入れれるようになります。
そして、文字を入れた後はTabキー2回 → Enterキーで「次へ」を選択できます。
ちなみに、この「場所」はここに表示されるテキストです。
この位置に表示したいテキストを入力。
そして、「次へ」を選択するための入力も追加。
ちなみに、文字は「ひらがな」入力だと正しく入力されません。
なので、文字入力が崩れた場合は「入力が半角になってるか」を確認してください。
具体的な対処法は↓この記事の「文字が正しく入力されない時の対処法」で解説。
この処理を追加して「1の処理」をクリック。
→ Alt+F5で1から動作を確認。
問題が無ければ、場所の打ち込みが完了です。
次はイベント情報を打ち込みます。
イベント情報を打ち込む
Discordは場所 → イベント情報に移動する際、アニメーションが入ります。
このアニメーション中に文字入力などの処理を入れると、バグります。
なので「次へ」をReturnキーで押したら「Waitで1秒ぐらい待つ」処理をいれます。
あとは、これまで通り適当なテキスト入力を作るだけです。
「次へ」を押した後は自動で入力欄が選択された状態になります。
なので、普通にテキストを入れるだけでOK。
ちなみに「イベントのトピック」で入力したテキストは、この位置に表示されます。
終了日 → 開催日の順に曜日を登録する
次は開催日の情報を入力します。
ここは「2045/01/01」のような数値入力ができません。
なので、ちょっと頑張って特殊な方法で入力します。
多くのPADユーザーを困難の地獄に叩き込む。
それが、テキスト入力不可カレンダーフォーマット。(詳細)
全国のWEB制作者の皆様へ。
「お願いですから、カレンダーフォーマットに数値入力をできるようにしてください(切実)」
まず、Discordのカレンダーフォーマットは「終了日」から入力しないとバグります。
なので、終了日 → 開始日の順に入れます。
この2つの入力が終わった後に開始と終了時間を入れます。
↓これがバグの例。
開始時間が終了時間を超えると自動調整が入る事が確認できます。
(この自動調整がPADを使う上で大きな問題になります)
ほかにも、紹介はしませんが…
開始日が終了日を一時的にでも、超えた日付に設定できない事が原因の問題が多数発生します。
他にも、開始日を先に決めると、自動で終了日が移動するなど…
PADを使う上で困るような、上手くいかないポイントが出てきます。
なので、Discordのカレンダーフォーマットは「終了日」から入力てください。
動作を観察してカレンダーに打ち込む方法を考える
自動化するために、まず動作を観察して記録します。
【動作の観察記録】
・Discordはイベントトピック入力後、Tabキー4回押しで終了日の所に行ける
・この状態でEnterキーを押すとカレンダーを開ける
・カレンダーを開いた状態で1度Tabキーを入力すると日付選択モードに入る
・日付選択モードで「右矢印」キーを入力すると日付を動かせる
・日付を動かした後は「Enterキー」で確定できる
・確定すると、その曜日の情報が登録される
↓要点は下図。
これで、下図の.gifのような操作ができます。
この動きの観察と記録ができたら、あとはPADのキー入力に落とし込むだけです。
そして、この方法で開催日を入力をするには今日~開催日時の日数情報が必要です。
この日数情報があれば「右矢印」を押して日付をズラす回数を決めれます。
次は、この情報を取得する方法を紹介します。
今日~開催日までの日数を取得する
「現在の日時」と「日付の選択ダイアログを表示」を一番上に追加。
これで、「今の時間」と「開催予定日」の情報を入手します。
その下に「日付の減算」を追加。
そして、下記のように設定。
・元となる日付 → 「開催予定日(変数で指定)」
・日付の減算 → 「現在の日付(変数で指定)」
・単位 → 「日」
あとは、「日付の減算」の下にある処理で数字の左側をクリック。
赤い丸が表示させ、ここで処理が一時的に止まるように設定。
この状態で「現在の日付を取得」をクリック。
→ Alt+F5キーで「1」から実行。
すると、変数で今日から開催予定日までの差が表示されます。(数字だけで表示)
これで、今日~開催日までの日数を取得する処理が完成です。
入力時間による日付ズレに対処する
Discordは親切心でイベントを登録したタイミングで開始日と終了日が自動入力されます。
そして、入力時間によっては開始や終了日時が “今日” から1日ズレます。
なので、この「日付ズレ」にこちらに対処します。
Discord君の親切心が仇になったパターン。
まずDiscordの動作を観察します。
「←」キーで日付を戻れることを確認。
そして、日付は現在日より過去に行かない事も確認。
そして、Discordのカレンダーは日付の移動が無いと「Enter」キーで確定できない事も確認。
ここから至った結論は下記。
・「右矢印」で1度日付をズラす
・1日ズレた日付を「Enter」キーで確定
・もう一度カレンダーを開きなおす
・「左矢印」を2回以上入力する(保険で3~5回キー入力があると安心)
・すると、過去の日付には進めないので余分な左矢印の入力は無効になる
・これで、確実入力した "今日の日付" を設定できる
・あとは、23:59分のような紛らわしい時間にPADを動作させない
これを処理として書くと↓のようになります。
%EventName%{Tab}{Tab}{Tab}{Tab}{Return}{Tab}{Right}{Return}{Return}{Tab}{Left}{Left}{Left}{Left}
これで、確実に「今日」の日付から処理をスタートできます。
以上が、入力時間による日付ズレへの対処法です。
//ーーーーー
※同じ日付だと確定できない事は後から気づきました。
なので、これ以降の記事では日付を1日進めて確定する処理が抜けてます。
よく見ると、ミスってるので注意してください。
カレンダーで終了日を指定する
次は、現在の曜日~開催日までの曜日の差の数だけ「→」キーを押す処理を作ります。
これは、ループ → 「Loop」を使うと作れます。
Loopの開始値と増分を「1」に設定。
そして終了で、日付の減算ので取得した「日付のズレ変数」を設定。
あとは、Loopの変数名も適当に設定。
これで開始値1からループ処理が1回行われるごとに+1される。
開始値「1」から → 「+1」 → 「+1」→ 「+1」
これを繰り返して「終了:」の値になれば処理が止まるようになります。
プログラミング的に書くなら…
for (i = 1; i <= Day_Difference%; i++)
をやってます。
分からなければ、この値をそのままコピーでOK。
いつか分かる時がきます。
あとは、ループ処理内に「→」キー入力を追加。
そしてループ後に「Enter」キー入力を追加。
これで、終了日を指定できます。
あとは、カレンダーには表示アニメーションが入ってます。
そしてたまに、キー入力が速すぎて、このアニメーションの再生を超えて処理が崩れることがあります。
なので、キー入力の間隔の遅延を「50」などの少し大きめに設定してください。
以上で、終了日の入力が完成です。
カレンダーで開催日を指定する
開催日は終了日とほぼ同じ方法で入れれます。
1つ違うとすれば、Shift+Tabキーで選択を逆方向に動かす必要がある事です。
Shift+Tabキーの入力は{Shift}({Tab})で設定できます。
これを入れて、あとは終了日と同じ処理をつくるだけです。
※ここも1回カレンダーを1日進めて確定するという処理の表記が抜けてるので注意。
{Return}{Shift}({Tab}){Shift}({Tab}){Shift}({Tab}){Return}{Tab}{Right}{Return}{Return}{Tab}{Left}{Left}{Left}{Left}
↑これが正解
あとは、ループ条件や中の処理は同じです。
なので、Shift+クリックで「Loop」~「End」を複数選択。
Ctrl+C → Ctrl+Vで複製 → ドラッグ&ドロップで移動。
これで、開始日を打ち込む処理が完成です。
他の要素を入力してイベント作成
あとは、残りの要素を入力するだけです。
Tabキーで選択をズラし、必要な情報をキー入力するだけの簡単なお仕事。
Discordの時間は、最後に{Return}を入力しないと確定しないので注意。
16:00 → Tabキーのような操作だと、数字が入力されません。
そして、入力前の初期値が残ったままになります。
16:00{Return}のような形で入力してください。
ちなみに「カバー画像をアップロード」はあまり使わないと思い、解説しませんでした。
もし、画像を追加したい方は↓のノウハウを取り入れて設定してください。
これらの情報を入力する処理がこちら。
これで、イベント情報の入力が終わり「次へ」に進みます。
進むと「確認」の画面が出てきます。
こちらは初期状態で「イベントを作成」が選択されてます。
なので、Enterキーを押す処理を追加するだけで実行できます。
このイベントの情報 → 確認にも画面切り替えのアニメーションがありましたが…
要素が複雑でないのか、1秒待つWait処理を入れなくても普通に動きました。
(気になる方は、Wait処理を入れてください)
これで、イベントの作成が完了です。
あとは、必要であればCtrl+Wキーで閉じる処理を入れます。
また、間違えて作ったイベントは「…」 → 「イベントをキャンセル」で消せます。
後で修正できるので、気軽に確定処理まで進めて大丈夫とおもいます。
以上が、Discordのイベント情報を自動入力し、送信する方法です。
より安定して動かすためのヒント
キーの送信先:を「ウインドウのインスタンス/バンドル」に設定。
そして、ウインドウインスタンス:で開いたwebサイトの変数を設定。
すると、より安定して動きます。
安定させたい方は、全てのテキスト入力処理にコレを行ってください。
ただ… 「Loop」の中の処理はこれを入れるととても重たくなりました。
なので、あえて入れないのもアリです。
1週間ぐらいの差であれば耐えれると思いますが…
1か月後のイベントを入れるのは、少し耐えれない遅さだと思います。
あとは、カレンダー表示関係はアニメーションがありタイムラグが発生します。
なので、キー入力の間隔遅延を「50」ぐらいに設定すると安心。
あとは、時間などは「ユーザー変数」のようなサブフローを作りまとめて設定。
すると、後で編集しやすく、他のWEBサイトへの入力にも応用が効きます。
以上が、より安定して動かすためのヒントです。
おまけ:完成形の全体像
↓処理の全体像はこんな感じになります。
ブログだと劣化して読めないと思うので、Twitterに上げました。
こちらをご確認ください。
まとめ
今回は、Power Automate for DesktopでDiscordのイベント情報を自動入力し送信する方法を紹介しました。
・まず、WEB版Discordで適当なチャンネルを立ち上げる
・左上の「イベント」でイベントを追加する
・「イベント」はTabキーで選択できないので「WEBページのボタンを押します」を使用
・あとは、キー入力 → Tabキーで選択をずらして必要な情報を入れる
・アニメーションがある所で上手くいかない場合は遅延処理入れる
・カレンダーは文字入力で日付を指定できない
・なので、カレンダーは「→」や「←」といった矢印キー+Enterキーを使う
・カレンダーは終了日から入れないとエラーが出るので注意
また、他にもDiscordやPADについて解説してます。
ぜひ、こちらもご覧ください。
コメント