リトルビッグプラネット™2でアップロードmatterest chatbot


スラックを使用している誰でも、これまでのMattermostについて聞いたかもしれません、あるいは、内部/仕事メッセージング・プラットホームとしてそれに移行することさえできました.あなたがそれらのうちの1つでないならば、あなたは後で私に感謝することができます.はい、MatterMestは、私はあなたの最愛のスラックアプリのかなり良い交換として(自信を持って)と言うことができるオープンソースのメッセージングプラットフォームです.プライベートとパブリックチャネル、複数のランニングワークスペース、言及能力、および他のサブスクリプションベースのメッセージングアプリケーションで欠場することがあります一つのことがあります:それは管理パネルです.あなたがそこで' root 'であるので、あなたはそれについて何でもすることができます.私はそれが企業のバージョンがある言及?それは本当にMITライセンスを持つオープンソースプラットフォームです.しかし、我々がすべて知っているように、すべてのIT部門や組織は、コードにダイブを掘ると、独自の目的のために必要な機能を追加するに十分な';オタク';を持っている企業のサポートが存在した理由です.
他の多くのメッセージングアプリのように、mattermostボット作成をサポートします.これは、メッセージングイベントに耳を傾けるWebSocketクライアントを利用します.言語結合もPythonとゴングのようないくつかのプログラミング言語のために存在します、しかし、今度は、私は選択の言語としてゴランを使います.
MatterMestのメッセージを交換するチャネルを使用します.したがって、MaxTestで起こったすべての会話は、直接、プライベートチャネルまたはパブリックチャネルのメッセージかどうか、チャネルを介して実行されます.それがどのようにコードで動くか説明しましょう.完全なソースコードのためにこのlinkに進んでください、私は実装の重要な部分だけを説明することについてです.
まず第一に、明らかに、ロボットとして最も重要な機能にアクセスするクライアントオブジェクトです(私は、それがゴランでそれを「オブジェクト」と呼ぶために、言語設計原則を満たすかどうか、確かにわかりません、とにかく、私はあなたにヒントを与えます:それは、ちょうど構造です)!以下はスニペットです.
client = model.NewAPIv4Client(URL)
それから、我々はアクセストークンをセットしなければなりません、我々がBootになっている実際のユーザーアカウントの代わりに『ボット』アカウントを使うので、我々はユーザー名とパスワードの代わりにAuthをするために、トークンを使います.私はあなたが何を考えている知っている、mattermostユーザーの2種類があります:“実際の”ユーザーとボット実際のユーザーは、あなたが誰か他の誰がこの2番目の誰が最も使用する呼吸、それは人間です.その後ボットは、..まあボット.ボットは、ログインすることはできませんので、パスワードを持っていない特別なタイプのユーザーの一種です.それで、私は、ボットがMatterestに入る唯一の方法がトークンを使用していることに驚くことはないと思います.この1行目のコードは次のようになります.
client.SetToken(BOT_TOKEN_SECRET)
次の重要なことはWebSocketクライアントをチャットイベントを聞くために作成することです.
webSocketClient, err := model.NewWebSocketClient4("ws://localhost:8065", client.AuthToken)
if err != nil {
    println("We failed to connect to the web socket")
    PrintError(err)
}
SetToken関数で設定したクライアントオブジェクトからWebSocket URLとAuthトークンを渡す必要があります.このコードはエラーが発生した場合にエラーオブジェクトを返します.アペラー.あなたの良い画像を与えるために、モデル.ApperErrorには、エラーID、メッセージ、詳細、HTTPステータスコードなどのいくつかの有用なプロパティがあります.WebSocketクライアントが作成された後、イベントを聞くことを忘れないでください.
webSocketClient.Listen()
確かにその行は自己説明されたコードであるので、私たちの旅の核心にさらに進みましょう.
go func() {
    for {
        select {
        case resp := <-webSocketClient.EventChannel:
            HandleWebSocketResponse(resp)
        }
    }
}()
そこにGoroutineは、このトピックの最も興味深い部分が来る:WebSocketのチャネル値をキャッチするために無限のプロセスを作るために起動します.以下は、あなたが探しているスニペットです.
if post.ParentId == "" {
    if matched, _ := regexp.MatchString(`(?:^|\W)leave day(?:$|\W)`, post.Message); matched {
        SendMsgToChannel(dm.Id, "You have 16 leave days left.", post.Id)
        return
    } else {
        SendMsgToChannel(dm.Id, "I did not understand you!", post.Id)
    }
} else {
    form := url.Values{}
    form.Add("post_root", post.ParentId)
    form.Add("user_mm_id", post.UserId)
    form.Add("comment", post.Message)
    endpoint := "timesheet/broadcast_task_comment_except_user"
    response, _ := http.PostForm(API_URL+endpoint, form)
    defer response.Body.Close()
}
私の職場で使用するこのケースでは、私のボットは、ポストを使用して応答チャットまたは新しいチャットを区別することができます.変数名.私は、現在の年次休暇をユーザー(従業員)が残して、我々の内部システムから来るバグ議論の糸でメッセージを放送することを教えるために、私のロボットをプログラムしました.見ることができるように、いくつかの行は、ダミーのコードとして、完了した1つの確かに我々の内部のプライベートリポジトリに移動されているままになります.それにもかかわらず、これらのすべては既にチャットクライアントに応答するAPIクライアントを開始することからボットを作成する方法をあなたに考えさせます.サンプルはまだマシンのルールベースのメカニズムを使用して、確かにマシンの学習のようなより高度なテクニックを使用することができます、それは実際にあなたのニーズに依存します.それまで、ハッピーハッキング!また