go - 在 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]
非常感谢任何帮助!
解决方案
真的很抱歉我错误地定义了松弛客户端。完整答案在这里: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
}
推荐阅读
- flutter - 单引号中的flutter_html图像src标签
- generics - 从 num 扩展的泛型类型和从 int 到 double 类型转换的问题
- postgresql - JackRabbit OAK:在 postgresql 中生成空闲 DB 事务
- scala - Scala 编译器抛出:java.lang.IllegalAccessError: Class 'scala.tools.nsc.transform.patmat.PatternExpansion$ExtractorAlignment'
- c# - 在没有 JS 的 Blazor 中将焦点设置在 InputText 上
- android - 在 kotlin 中使用多个参数的改造请求无法正常工作
- javascript - 如何在 vanilla js 中插入媒体查询?
- javascript - Firestore user_ref.update 不是函数
- reactjs - 我试图从项目中排除momentjs,但这并没有给出结果
- vue.js - 如何在Vue vmodal中绑定动态html内容