首页 > 解决方案 > 在 Golang 中发布 Slackbot 响应

问题描述

我正在关注教程,试图让 go slack lib 工作。我能够从 slack 接收消息,存储在ev变量中但无法回复

    func replyToUser(ev *slack.MessageEvent) { //change this to the channel for the actual app
    fmt.Printf(ev.User)

    slackClient.PostMessage(ev.User,
        slack.MsgOptionText("hello world", false),
        slack.MsgOptionUser(ev.User),
        slack.MsgOptionAsUser(true),
        slack.MsgOptionUsername("songbot"),
    )
}

我正在将我从 slack 收到的事件传递给这个函数,并希望用hello world. 我正在使用经典的 slackbot。

目前收到错误:

panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x18 pc=0x127abb7]

非常感谢任何帮助!

标签: goslack-api

解决方案


真的很抱歉我错误地定义了松弛客户端。完整答案在这里:https ://github.com/slack-go/slack/issues/796

运行代码是:

package main

import (
    "fmt"
    "log"
    "os"

    "github.com/slack-go/slack"
)

var (
    slackClient *slack.Client //initialise the slack event
)

func main() {
    slackClient = slack.New(os.Getenv("SLACK_ACCESS_TOKEN"))
    rtm := slackClient.NewRTM() //create the realtime messaging objext
    go rtm.ManageConnection()   // set it up in a go routine

    for msg := range rtm.IncomingEvents {
        switch ev := msg.Data.(type) {
        case *slack.MessageEvent:
            go handleMessage(ev)
        }
    }
}

func handleMessage(ev *slack.MessageEvent) {
    fmt.Printf("%v\n", ev)
    fmt.Printf("Text Received: %v\n", ev.Msg.Text)
    _, _, err := slackClient.PostMessage(ev.Channel, slack.MsgOptionText("message", false), slack.MsgOptionAsUser(true))
    if err != nil {
        log.Println("error sending to slack: " + err.Error())
    }
    return
}

推荐阅读