在Golang中发布Slackbot响应

问题描述

我正在关注this教程,试图使go 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"),)
}

我将从松弛状态收到的事件传递给此函数,并希望以hello world进行答复。我正在使用经典的slackbot。

当前出现错误

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

任何帮助,不胜感激!

解决方法

非常抱歉,我错误地定义了松弛客户端。这里的完整答案: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
}