问题描述
我正在关注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
}