まったりするmatayu

ツイートにゴミがついた感じのブログ

MM経由でnews-ieに投稿するplugin(投稿フォームの実装[見た目だけ])

(この記事は作業ログだから,間違いがある可能性が高い)

openInteractiveDialogで投稿フォームを開く.

基本的に次のplugin-demoを参考に実装した.

mattermost-plugin-demo/command_hooks.go at master · mattermost/mattermost-plugin-demo · GitHub

MMのAPIドキュメントに,openInteractiveDialogというmodal windowを開くためのAPIがあるのを発見した.

Server Reference

これを使って投稿フォームをslashコマンドで開けるようにする.

slashコマンド自体はExecuteCommand APIを使って実装した.

Server Reference

フォーム内容の設定は次を参考に, "github.com/mattermost/mattermost-server/v5/model" パッケージのモデルの形に従ったりplugin-demoの形を参考にしたりして書いた.

スラッシュコマンド打ったらこんな感じのフォームが出現した.

f:id:mattari_matayu:20200629145545p:plain
フォーム出たー!

gitlab

Sign in · GitLab

次以降やること

フォームからメッセージを受け取って加工できるようにする.

メッセージ(記事の題名,markdown形式の本文)

加工(hugoのmarkdown形式にする)

まずはしっかりフォームに入力してもらったものを受け取れるようにする.

作業中の殴り書き(参考にならないです. 多分.)

MMのmodal window

Interactive Dialogs — Mattermost 5.24 documentation

スラッシュコマンドでトリガーIDを含むHTTPリクエストを統合機能が受け取る必要がある.(プラグインがそれを受け取ることはできる?)

そうしたら,

https://<your-mattermost-url>/api/v4/actions/dialogs/open

にトリガーIDを含むHTTP POSTリクエストを送信することでインタラクティブダイアログを開くことができる.

スラッシュコマンドはこんな感じに書くといいのかも.

GitHub - cmeadows/mattermost-plugin-tableflip: Like the `/shrug` but better. Adds (╯°□°)╯︵ ┻━┻ to your message

modal windowを開くにはどうすれば良いのか.

トリガーIDなしでInteractive dialogを開くことができるようにするみたいな話を見つけたけどどうだろう.

MM-15340 Interactive dialogs without TriggerId by scottleedavis · Pull Request #10914 · mattermost/mattermost-server · GitHub

pull request辿ってたら,普通にopenInteractiveDialogというのが実装されていることに気づいた.

Server Reference

ここに使い方の例が載ってる.

mattermost-plugin-demo/command_hooks.go at master · mattermost/mattermost-plugin-demo · GitHub

やっとコード書けそう.

Modal windowをReact使って実装するつもりだったけど,openInteractiveDialog を使えばそこまでしなくても良さそう.

すごい巡り巡ってドキュメントまで戻ってきた感(ドキュメントしっかり読めばよかったのかも.でもその過程で色々なものの理解が深まった).

MM経由でnews-ieに投稿するplugin(実現可能か調べる)

(この記事は作業ログで,間違いがある可能性が高い)

図や文章に起こした方が良いと言うアドバイスをもらったからとりあえず大まかな設計図を書いてみた.markdownに変換するところまで.

f:id:mattari_matayu:20200623161412p:plain
設計図

入力フォームから受け取った記事の情報をgolangでhugoのmarkdownに変換するながれ.

まずHooksのMessageHasBeenPostedで特定の文字列をユーザーが送信したら入力フォームを開く形にする.

もしくはslashコマンドで入力フォームを開けるようにする. (スラッシュコマンドはhttpリクエストを送るみたいだが,送らなくても使えるだろうか)

入力フォームは,MMでチャンネルヘッダを編集する時に出てくる次の写真のようなものを作れば良いと思うから,この部分のMMのソースコードを読んで真似すれば作れそう?

f:id:mattari_matayu:20200623140150p:plain
チャンネルヘッダを編集する入力フォーム

この部分のソースコード

mattermost-webapp/edit_channel_header_modal.jsx at master · mattermost/mattermost-webapp · GitHub

既存のpluginで入力フォーム的なのを開いたりしてるやつないかなーと思って調べたら.次のようなpluginがあった.

https://mattermost.gitbook.io/plugin-confluence/config-notifications/subscribe-command

よって,入力フォームを作って開くことはできそう.

受け取った記事の情報をhugo markdownに変換するのはgolangで次のような感じで書けばできる気がする.

package main

import "os"

// Article include article infos.
type Article struct {
    Title   string
    Content string
}

func main() {
    a := Article{
        Title:   "hello",
        Content: "hello. This is a test.",
    }

    output := "+++\n" + a.Title + "\n+++\n\n" + a.Content
        // outputを出力
}

これから

入力フォームを開くことができれば作れそうだから,入力フォームを作ってみる. (Plugin君,君は一体どこまでできるのかね.)

Mattermost経由でnews-ieの投稿をするMM bot plugin(hello, world編)

MMからnews-ieの記事を投稿できるようにupcoming bot pluginを作成していく.

作業ログだから間違った情報もそのまま載せている。後でしっかり知見としてまとめる。

MMのバージョン: 5.23.0

大まかな流れはこんな感じ.

  • MMから記事内容を受け取る.

  • 受け取った記事内容をhugoのmarkdownに落とし込む.

  • hugoによってhtml化された記事をpushする.

testする際はngrokで作ったグローバルip(mac bookのlocalhostを結びつけたもの)のところにhtmlを送りつける感じで.

hello, world

plugin 作るの初めてだからまずhello, worldからやってみる.

このquick startというやつを参考に進める.

developers.mattermost.com

サイトの通りにやったら簡単にできた.

f:id:mattari_matayu:20200615104144p:plain
hello, world!

お絵かき配信振り返り21~29

めっちゃ動画細切れになった〜〜〜

↓最初の動画

今回描いた絵.

f:id:mattari_matayu:20200614095601p:plain
今回のスバル

今回一番こだわったのは顔の輪郭の形.

前回描いた絵の顔の輪郭がなんか違和感があったから,直してみた.

↓前回の輪郭.

f:id:mattari_matayu:20200614095558p:plain
前回の輪郭

↓今回の輪郭.

f:id:mattari_matayu:20200614095610p:plain
今回の輪郭

意識したのは直線と曲線の描き分け.

前回と今回の輪郭の描き方を並べるとこんな感じ.

f:id:mattari_matayu:20200614100653p:plain
輪郭

輪郭には直線の部分と曲線の部分があって,特に顎の部分は直線,頬に近づくにつれて曲線になる感じ.

だから,曲線の部分と直線の部分を分ける感じで描いてみた.

(描いてみた.というよりその場の思いつき?)

f:id:mattari_matayu:20200614100649p:plain
直線と曲線を分けて描く

なんかいい感じになった.というか絵柄が変わった.

まああんまり一気にいろいろ直そうとすると楽しくなくなりそうだから,気長に.

1枚につき1箇所,前よりよくなってればいいかな.前より良い絵を描く必要もない.

手を描くのをサボり続けている. 気が向いたらやる.

goreturns?

golangにはフォーマット(コードの見た目)を綺麗にするgofmtという開発支援ツールがあり,

それにimportの整理機能をつけたgoimportsというものもある.

それに似たgoreturnsなるものがあったからどういうものか,goimportsと何が違うのかを調べた.

goreturns

github.com

パッケージ説明には

This tool adds zero-value return values to incomplete Go return statements, to save you time when writing Go. It is inspired by and based on goimports.

と書いてある.

"based on goimports"だから,goimportsの機能+αみたいな感じ.

+αの部分は, "adds zero-value return values to incomplete Go return statements"で,

0の返り値をつけるべき時につけるようだ.

0を返す時ってどんな時?

たしかC言語では関数が正しく実行された時に0を返す慣習があるというのを聞いたような聞かなかったような.

それについて述べられた記事が調べたらあった.

mseeeen.msen.jp

main関数が正常終了したことをシェルに伝えるためにreturn 0; をするようだ.

シェルの終了ステータス0が正常終了という意味.

ということはgolangで0をreturnするのもC言語のそれと同じ意味があるのか?

違った

github.com

ここに張ってあるgif画像をよくみると,

returnの値の不足をゼロ値で補完していることがわかる.

golangにおけるゼロ値とは単に0のことを指すのではなく,

string であれば ""

int であれば 0

bool であれば false

といった変数の宣言をした時に最初に入っている値のことを指していることがわかった.

結論

goreturnsgoimportsの機能に加えて,returnの値をゼロ値で補完する機能がある.

(結局githubに書いてある文言と同じになった)

JSON, YAML,,, TOML?

webアプリなどを書くにあたって設定情報の格納に使用するデータ構造の形式がいくつかある.

tomlというのを初めて聞いたから調べてみる.

とりあえずJSONYAMLはこんな感じ.

JSON

{
      "hoge": {
          "hoge1":  "hoge",
          "hoge2": "hogehoge",
          "hoge3":  "hogehogehoge"
      },
     "huga: "huga"
} 

今のところ一番お世話になっている.

YAML

hoge:
 - hoge1: "hoge"
 - hoge2: "hogehoge"
 - hoge3: "hogehogehoeg"
huga: "huga"

1回使ったことあるくらい.

toml

[hoge]
hoge1 = "hoge"
hoge2 = "hogehoge"
hoge3 = "hogehogehoge"

huga = "huga"

なんかめちゃ読みやすい.実際人が読みやすいように作られているようだ.

golangでTOMLを扱う時はこれを使うと良いかも.

github.com

読みやすいけど書き方はなんかいろいろありそう. github.com

構造体とtomlの結び付けする時にデータの構造を想像しづらいからちょっと慣れが必要かも?

参考:

ja.wikipedia.org

はやおき

mattari-matayu.hatenablog.com

時計を起きた時に見えるところにおかない事に加えて,

やりたいことを寝る前に決めておくことで,最近6時か6時半には起きれるようになった.

1限前(10時くらい)に起きてた自分としてはかなりの進歩.

しかし,起きてからスイッチが入るまでに1時間以上はかかる.

ちょっと前まで10時間くらい寝ていたからそのせいかもしれない(ちょっと鬱っぽかったかも??).

朝にコーヒーを飲んだり,シャワーを浴びたりして,どうにか目を覚ましている感じ.

今,布団に入る時間が0時から1時くらいだから,

もう少し早くした方がいいかも.

リモート講義になったことで自分のだらけ具合が露見した感じがある.

通学している時はなんかやってる気になってたのかも.

睡眠についてもそうだが,リモート講義によって得たもの,気づいたことは結構あって,

良い経験になっている.