コメントを受信してみよう

# コメントを受信してみよう

こんにちはこんばんはおはようございます。

昨年のアドカレでは、箱の作成から時計の表示までやりました。
次は何を作ろうか
そうだね、コメントを受信する何かだね。
ということで公式の焼き直しです。
https://virtualcast.jp/wiki/vci/script/reference/messagecomment

- コメントを受信するには「message」関数を使用します。
この関数、コメントの受信や入退出の他、
VCI同士の制御・変数値のやりとりや同期などに良く利用されます。


　「message」を制する物は同期を制す。知らんけど。
　今回はコメントの受信に重きをおいて説明していきます。


- サクッとコードを書き書き
```lua
function onMessage(sender,name,message)
    msg="sender[name]="..sender["name"].."\n"..
        "sender[type]="..sender["type"].."\n"..
        "sender[commentSource]="..sender["commentSource"].."\n"..
        "name="..name.."\n"..
        "message="..message
    print(msg)
end

vci.message.On('comment', onMessage)
```
　コメントを受信すると↓のようなのが出てきたと思います。
![8.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2353185/86771764-e2e6-64a8-94c3-449941e893e9.jpeg)
![9.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2353185/f7c0831e-2fe8-9530-762a-c8fd574e2fe2.jpeg)


## コードを解説していきましょう。
- 「vci.message.On('comment', onMessage)」について
この関数と記述例の意味としては
システム（アプリケーション）から通知される「comment」というmessageを受信し、
「onMessage」という関数へ内容を渡すという意味です。
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2353185/87236970-1ab3-9a72-d505-f22a70f99075.png)
　vci.message.Onはソースコードの最後に記入するべきだと昔読んだ気がするのですが・・
　どこにも記載が見当たらないですね(違ったらごめんなさい)。
- onMessage(sender,name,message)
 ```lua
function onMessage(sender,name,message)
```

　受信したmessageの内容は、onMessageへ「sender」「name」「message」のが通知されます。
　「sender」は配列（テーブル）型の変数となっており、
　「sender["name"]」「sender["type"]」「sender[“commentSource”]」が格納されています。

　実際に検証しながら確認してみましょう！
　なおショウルームは環境がないので未実施です・・。

- sender["name"]
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2353185/fc67d84d-945b-24dc-98ef-b8d40678e5c0.png)
この通りになりました。

　 ニコ生の184は無、つまり「""」で返されました。
　 (画像では文字結合の関係で空白となっています)
　 (昔nilじゃなかったっけ・・勘違いかな。)

- sender["type"]
![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2353185/204bf7fe-0ac0-f91a-05d9-1c6531f8e82c.png)
こちらはこの通り。
 あんまし活用できる機会は少ないでしょう・・。

- sender[“commentSource”]
![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2353185/f123de67-6c4a-2966-b3d8-9509f4dbded4.png)
　コメントソースと名のつくとおり、何処のプラットフォームからのコメントか判別できます。
　コメントビューア等を作成する時に便利でしょう。
　なおVCIはコメント元というかプラットフォームはないため、無「""」が返されました。
　 (画像では文字結合の関係で空白となっています)

- name
![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2353185/5b86ab2e-491e-d30a-cee1-f334aea46378.png)
　全部「comment」。
　こちらも活用は出来なさそう？

- message
![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2353185/e30dd7bb-8749-ed58-05c4-6457a1ba230a.png)
 この通り投稿されたコメント、ツイートされた内容が通知されました。

- 統合して表示してみよう
後は変数msgに一度情報を書出して見ましょう。
ごちゃごちゃしていますが、一応軽くコードの説明をすると・・
![7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2353185/76ec1d39-220d-a9e4-e8f4-143f80dab7dd.png)
とにかく文字列や変数、改行コードをどんどん繋げて最後にprintで出力しています。

- エラーメッセージについて
受信したmessageに引き渡す関数名または関数名そのものが不一致（無い）場合、
以下のようなエラーが表示されます。
![10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2353185/73b8d13f-c5a2-a8a7-62e0-2329426ffbff.png)
　逆に言うとこのエラーが表示された場合は関数名を間違えている可能性があります。

# ○最後に
いかがだったしょうか？
もう少しわかりやすく説明したかったのですが、このあたりが限界でした。
コメントを受信することによりコメントビューアや特定のコメントで動作する何かを作成できます。
皆さんもその何かを考えて作ってみてね！

![2022120301564638 (2).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2353185/bdb9b59b-030e-d720-0dc5-cb51a334053b.jpeg)