見出し画像

Vcot twitch連携メモ

twitchで「!Vcot ○○」と発言すると、「発言者:○○」がVcotに入力される
っていうのを力業で作りました。
名前は特にないです。コメントが打ち込まれてからだいたい15秒です。

使用の注意

  • alertが3回出る。(今は2回)

  • 最悪の場合データの上書き発生がする(上書き+保存+閉じるの工程あり)

  • Vcotのウィンドウの真ん中下当たりを1回クリックの可能性

    • (Vcotの下のウィンドウにボタンがある場合それが押される)

  • クリップボードを使用するのでそれまでのクリップボードが消える

  • Vcotを動かすたびにお金がかかる(Vcot自体の仕様)

  • マウスキーボードの再現マクロなので何か作業しながらはできない

    • (カーソルがズレるとやばい)

  • あらゆる損失に私は一切責任を取りません。自己責任で。


必要なソフト

以下のソフトをPCに入れます。

Vcot

使用にはchatGPTのAPI料金を支払う必要があります。

たぬえさ3

トリガー発火してホットキーを入力させます。

kmmac72

コメントをコピしてVcotにする。という動作を半自動化するマクロを走らせます。

Chatty

発火した瞬間のコメントログを出力させて利用します。



初回準備

Vcot

マニュアル通りでOK.
特記:表示キャラクターが小さすぎる、中央部分に透明部分がある、座る・寝そべるなどの動作を入れると失敗しやすいです。

たぬえさ3

イベント設定でトリガーを「!Vroid」にします。
アクションをキー入力で「Shift+ctrl+F12」が発火するようにします。


kmmac72

マクロを登録して、常駐モードを出せるように設定します。
KMacro.HOTをエディタで開いて、「Shift+ctrl+F12」でマクロが発火できるように設定します。

Kmacro.HOT

hotkey=[F12] Ctrl Shift : ホットキーのテストです。Message コマンドでメッセージを表示します
;Message "" "Ctrl+Shift+F12 が押されました"

include v_vcot.mac

v_vcot.macというマクロを「Shift+ctrl+F12」で発火する例

詳細はこっち見てください。


Chatty

初期設定は案内通りに。
自分のチャンネルに接続できるようになったら以下を変更します。
main-setting からmain-languageを日本語に変更したものとします。

  • Chettyを閉じる(Exit)のホットキーを作成する(ctrl+delete)

  • ウィンドウ名を最簡素なものにする(Chetty)

メインー設定からその他-hotkey

EXIT Chattyは初期設定にはないので、右上の「+」から新設定。
範囲は「App」にします。

ビュー-オプション-タイトルバーでウィンドウ名を変更。

初期でついているチェック5つを全て外して
下の簡易タイトル表示にチェックを入れます。

またログの出力場所を確認しておきます。

メイン-設定-Chat-Log to file-その他の設定領域の「開く」
ボタンを押すとそのディレクトリが出ます。

 デフォだとCドライブ/ユーザー名/.chatty/logsにチャンネル名ごとにログが作成されています。

設定変更はChattyを閉じないと反映されない場合があります。

その他

Chattyのログ(.log)を.txtに書き換える処理のため、中身が書いてある適当なtxtファイル(Shift-JIS)を作成します。

特にこだわりがなければ以下の方法で。

  1.  .logをエクスプローラー上でコピペ

  2. コピペした方の拡張子を.logから.txtに書き換え

  3. .txtにした方をVScodeなどで開き、UTF-8からShift-JISに書き換えて保存して閉じる

    1. このとき、文字化けが残らないようにする。重要。

こんな感じ

これにUTF-8からShift-JISに変換方法があります。



初回準備2

kmmac72で扱うマクロです。
これをコピペして指定箇所を変えると使えます。
序盤のSET4行を書き換えて使用してください。

それぞれ

SET %chara Vcotのキャラクター名
SET %Chatty Chattyの起動ファイルがある箇所への絶対参照
SET %loglog Chattyが出力する.logファイルがある箇所への絶対参照
SET %txtlog %loglogの中身を上書き保存する.txtファイルがある箇所への絶対参照

です。キャラクター名は
Vcotのフォルダ内の「VRMAvater」や「PNGAvatar」フォルダ内で使用されているキャラクター名です。


テスト不足のα版なので注意してください。

v_vcot.MAC

DIM %hoge %fuga %piyo %i %j %hoge2 %nm
DIM %chara %Chatty %loglog %txtlog

SET %chara 小春六花
SET %Chatty "D:/././Chatty_0.25_win_standalone/Chatty.exe"
SET %loglog "C:/././.chatty/logs/#k171s171y230.log"
SET %txtlog "C:/././.chatty/logs/#k171s171y230.txt"

;Vcotを始めていいかの確認
message %0 (& "Vcotに話させていい?\n「はい」を押したら絶対に動かないでください。");YES,NO,CANCELが文字列で返される

IF (<> %0 YES) then
    message "" 中断します。
    END
ENDIF

;キー入力停止
blockinput 10000

    ;Chattyが起動しているか確認
    SET %hoge Chatty
    SET %fuga (find-window %hoge)
    IF (not %fuga) then
        ;キー入力停止解除
        blockinput 0
        message "" Chattyを起動してください。終了します。
        END
    ENDIF

    ;Chattyをctrl+delで閉じる
    ACTIVATE-WINDOW %hoge
    KEY [CTRL]++ [DEL] [CTRL]--
    DELAY 2000 500

    ;.logを開いてコピー閉じ
    SHELL %loglog Else
    DELAY 1000 500
    ;アクティブウィンドウの左上を原点にする。
    SETORIGIN (getwindowpos)
    LCLICK (100,100);
    KEY [CTRL]++ A C [CTRL]--
    DELAY 500
    KEY [CTRL]++ W [CTRL]--
    DELAY 500

    ;.txtを開いて貼り付け保存閉じ
    SHELL %txtlog Else
    DELAY 1000 500
    SETORIGIN (getwindowpos)
    LCLICK (100,100);
    KEY [CTRL]++ A V S [CTRL]--

    DELAY 500

                        ;キー入力停止解除
                        ;blockinput 0
                        ;message "" "保存エラーが終わったら押す"

                        ;キー入力停止
                        ;blockinput 6000
    KEY [CTRL]++ W[CTRL]--

    ;================================================================================================================================
    ;.txtからreadで読込

    open %txtlog input 1
        :label
            SET %59 %60
            SET %60 %61
            SET %61 %62
            SET %62 %63
            read 1 %63
        if (= (eof 1) "False") goto :label
    close 1

    ;Vcotの行を探し出す
    ;%59-%63の中に「!Vcot」が含まれる行を探し出す
    ;最後行を優先して抽選する。
    IF (in !Vcot %63)then
        SET %58 %63
        ELSEIF (in !Vcot %62) then
        SET %58 %62
        ELSEIF (in !Vcot %61) then
        SET %58 %61
        ELSEIF (in !Vcot %60) then
        SET %58 %60
        ELSEIF (in !Vcot %59) then
        SET %58 %59
    ENDIF


    IF (= %58 ) then
        ;キー入力停止解除
        blockinput 0
        message "" Vcotが含まれていません。終了します。
        END
    ENDIF

    ;発言者の名前を取り出す
    SET %i (+ (pos < %58) 2);名前先頭の~を省く
    SET %j (- (pos > %58) %i)
    ;i 文字目から j 文字を返す
    SET %nm (substr %58 %i %j)

    ;「!Vcot」が含まれるまでの数値を出す
    SET %j (pos !Vcot %58)
    SET %i (+ %j 5);「!Vcot」が5文字
    SET %j (len %58)

    ;i 文字目から j 文字を返す
    SET %58 (substr %58 %i %j)
    ;空白を整形
    SET %58 (trim %58)

    ;Vcot以降の文字を入れる
    SET %piyo (& %nm : %58)
    ;================================================================================================================================


    ;Chattyを再起動
    SHELL %Chatty Else

    DELAY 2000 500
;キー入力停止解除
blockinput 0
;メッセージの確認(送って大丈夫なものか)
message %0 (& メッセージ確認: %piyo);YES,NO,CANCELが文字列で返される

IF (<> %0 YES) then
    message "" 中断します。
    END
ENDIF

;================================================================================================================================
;===Vcot操作======
;キー入力停止
blockinput 6000

    SET %hoge (& (ぶいこっと ) %chara)
    SET %fuga (find-window %hoge)

    ;Vcotが開かれているかを確認
    IF (not %fuga) then
        ;キー入力停止解除
        blockinput 0
        message "" Vcotが起動してないかキャラが違うよ!終了するね。
        END
    ENDIF
    ;アクティブにする
    ACTIVATE-WINDOW %hoge

    ;アクティブウィンドウの左上を原点にする。
    SETORIGIN (getwindowpos)
    SET %0 (div 3840 2 )
    SET %1 (+ (div 2160 2 ) -100);中心が待機モーションでズレるので股間に合わせる

    ;一度触れてフキダシを出す。触れる箇所が透明だった場合別の場所を指すようにする。
    LCLICK (& %0 "," %1)

        DELAY 800
        GETTITLE %hoge2
        IF (<> %hoge %hoge2) then
            ;アクティブにする
            ACTIVATE-WINDOW %hoge

            SET %1 (+ (div 2160 2 ) 150);股間にヒットしない場合うつ伏せなので足元を狙う
            LCLICK (& %0 "," %1)
        ENDIF

    DELAY 500

    ;位置調整
    SET %0 (+ (div 3840 2 ) -500)
    SET %1 (+ (div 2160 2 ) 200)

    ;フキダシが右側の時の処理
    SET %2 (token (getwindowpos) ,)
    if (< %2 -1350) SET %0 (+ (div 3840 2 ) 200)

    LCLICK (& %0 "," %1)
;キー入力停止解除
blockinput 0

SEND %piyo
KEY [RET]


END

マクロ解説

  • Alert1 マクロを開始していいかの確認

  • Chattyが起動していない場合終了

  • Chattyを閉じる(閉じるとlogが記録&i/oエラー避け)

  • .logをメモ帳で開いて.txtに上書き貼り付け(UTF-8文字化け回避)

    • 保存のとき失われる文字があるとエラーが出るのでOK押す

  • (Alert2 ) .txtに文字化けが入っている場合のwindowsエラー待ち用

    • 文字化けが入ってなければいらないです。上は;でコメントアウト。

  • .txtから1行ずつ内容を読み込み。最後の5行の中から「!Vroid」のある行を検出する

  • コメントを装飾し、「発言者:内容」に変形する

  • Chattyを再起動する

  • Alert3 コメント内容の確認。よければ進む。

  • Vcotの起動確認、キャラクター名確認

  • キャラクターをクリックしてフキダシを表示させる

    • このクリックが透明箇所をすると失敗します。

  • 入力箇所をクリックし、装飾コメントを送信する。


わかっている不具合

  • たまにChattyが複数起動する場合があります。

    • .log-nというファイルが増えます。

      • Chattyを全て閉じて.log-nなど増殖したものを削除でOK。

  • blockinputはPCの機種によって機能しません。

    • マクロで自動操作中、キーボードマウスが動かせます。

      • 最初のAlert以降、選択肢を押す以外絶対に動かさない。

  • kmmac72は処理の終了を感知できません。

    • DELAYというもので処理を遅らせて処理終了を疑似的に行っています

      • PCの性能で必要なDELAYの数値は増減します

        • 処理が終わらないうちに次の処理が始まると上手く行きません。

  • 挙動がおかしいと感じたら「Esc」キーを長押ししてください。止まります。

  • モニターサイズが異なる場合のテストしてません。

    • ;位置調整 の-500とか200を修正するなど、自分でマクロを書き換える必要があるかもしれません。

その他準備

これら機能を使うためには、必要なソフトが全て起動していないと駄目。
なので、Vcotのフォルダ内の「StartUp」にVcot以外のソフトのショートカットを入れるのをオススメします。

Vcotを起動したときに同時に全て起動します。


常駐的な使い方

必要なソフト項目全てを起動します。
OBSなど配信ソフトの画面上にVcotを出します。
kmmac72を常駐モードにします。

Vcotは最前面のピンを外して使用してください。
コメント取得に失敗する場合、
 フキダシを常に表示するボタンをONに。
 または待機モーションを行わないボタンをONに。

24/1/15追記

配信を始めたら、「!Vcot」コマンドが入力されるのを待ちます。

!Vcotコマンドが入力されると、たぬえさ3がホットキーを入力してkmmac72のマクロを起動します。

Alert1

「はい」を押したらマクロが始まります。エンターキーでも「はい」です。
裏で何か走らせていたり、マウスキーボードを動かし続けないといけない状態のときは使用しないでください。
「いいえ」、またはキャンセルで中止できます。
中止のとき、コメントはストックしていないので、再度コメントするようにお願いしてください。

「はい」を押しても必要ソフトが起動していない場合中止します。

送信されたコメントを確認できます。

なお、クリップボードを使っているので、途中でクリップボードを上書きすると失敗します。

キャンセルをしたとき、Chattyが落ちたままになることがあるので、注意してください。

要は
発火したら、エンターを2回押すと15秒ぐらいでコメントをVcotに送ることができます。


終わり


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