larkgin

package module
v1.3.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 7, 2025 License: MIT Imports: 12 Imported by: 2

README

Lark Gin

build codecov

Gin Middlewares for go-lark.

Middlewares

  • LarkChallengeHandler: URL challenge for general events and card callback
  • LarkEventHandler: Event v2 (schema 2.0)
  • LarkCardHandler: Card callback
  • LarkMessageHandler: (Legacy) Incoming message event (schema 1.0)

Installation

go get -u github.com/go-lark/lark-gin

Usage

package main

import (
    "fmt"

    "github.com/gin-gonic/gin"
    "github.com/go-lark/lark"
    larkgin "github.com/go-lark/lark-gin"
)

func main() {
    r := gin.Default()
    middleware := larkgin.NewLarkMiddleware()

    // lark server challenge
    r.Use(middleware.LarkChallengeHandler())

    // all supported events
    eventGroup := r.Group("/event")
    {
        eventGroup.Use(middleware.LarkEventHandler())
        eventGroup.POST("/", func(c *gin.Context) {
            if event, ok := middleware.GetEvent(e); ok { // => returns `*lark.EventV2`
            }
        })
    }

    // card callback only
    cardGroup := r.Group("/card")
    {
        cardGroup.Use(middleware.LarkCardHandler())
        cardGroup.POST("/callback", func(c *gin.Context) {
            if card, ok := middleware.GetCardCallback(c); ok { // => returns `*lark.EventCardCallback`
            }
        })
    }
}

Example: examples/gin-middleware

Event v2

The default mode is event v1. However, Lark has provided event v2 and it applied automatically to newly created bots.

To enable EventV2, we use LarkEventHandler instead of LarkMessageHandler:

r.Use(middleware.LarkEventHandler())

Get the event (e.g. Message):

r.POST("/", func(c *gin.Context) {
    if evt, ok := middleware.GetEvent(c); ok { // => GetEvent instead of GetMessage
        if evt.Header.EventType == lark.EventTypeMessageReceived {
            if msg, err := evt.GetMessageReceived(); err == nil {
                fmt.Println(msg.Message.Content)
            }
            // you may have to parse other events
        }
    }
})
Card Callback

We may also setup callback for card actions (e.g. button). The URL challenge part is the same.

We may use LarkCardHandler to handle the actions:

r.Use(middleware.LarkCardHandler())
r.POST("/callback", func(c *gin.Context) {
    if card, ok := middleware.GetCardCallback(c); ok {
    }
})
Token Verification
middleware.WithTokenVerfication("asodjiaoijoi121iuhiaud")
Encryption

Notice: encryption is not available for card callback, due to restriction from Lark Open Platform.

middleware.WithEncryption("1231asda")
URL Binding

Only bind specific URL for events:

middleware.BindURLPrefix("/abc")
Logger

lark-gin implements and uses lark.LogWrapper. You may set your own logger:

middleware.SetLogger(yourOwnLogger)

About

Copyright (c) go-lark Developers, 2018-2024.

Documentation

Overview

Package larkgin is gin middleware for go-lark/lark

Index

Constants

View Source
const DefaultLarkMessageKey = "go-lark-message"

DefaultLarkMessageKey compat legacy versions not use in this repo right now

Variables

This section is empty.

Functions

This section is empty.

Types

type LarkMiddleware

type LarkMiddleware struct {
	// contains filtered or unexported fields
}

LarkMiddleware .

func NewLarkMiddleware

func NewLarkMiddleware() *LarkMiddleware

NewLarkMiddleware .

func (*LarkMiddleware) BindURLPrefix

func (opt *LarkMiddleware) BindURLPrefix(prefix string) *LarkMiddleware

BindURLPrefix .

func (LarkMiddleware) GetCardCallback added in v1.2.0

func (opt LarkMiddleware) GetCardCallback(c *gin.Context) (*lark.EventCardCallback, bool)

GetCardCallback from gin context

func (LarkMiddleware) GetEvent added in v1.1.0

func (opt LarkMiddleware) GetEvent(c *gin.Context) (*lark.EventV2, bool)

GetEvent should call GetEvent if you're using EventV2

func (LarkMiddleware) GetMessage

func (opt LarkMiddleware) GetMessage(c *gin.Context) (*lark.EventMessage, bool)

GetMessage from gin context

func (LarkMiddleware) LarkCardHandler added in v1.2.0

func (opt LarkMiddleware) LarkCardHandler() gin.HandlerFunc

LarkCardHandler card callback handler Encryption is automatically ignored, because it's not supported officially

func (LarkMiddleware) LarkChallengeHandler

func (opt LarkMiddleware) LarkChallengeHandler() gin.HandlerFunc

LarkChallengeHandler Lark challenge handler

func (LarkMiddleware) LarkEventHandler added in v1.1.0

func (opt LarkMiddleware) LarkEventHandler() gin.HandlerFunc

LarkEventHandler handle lark event v2

func (LarkMiddleware) LarkMessageHandler

func (opt LarkMiddleware) LarkMessageHandler() gin.HandlerFunc

LarkMessageHandler Lark message handler

func (*LarkMiddleware) SetCardKey added in v1.2.0

func (opt *LarkMiddleware) SetCardKey(key string) *LarkMiddleware

SetCardKey .

func (*LarkMiddleware) SetLogger added in v1.3.0

func (opt *LarkMiddleware) SetLogger(logger lark.LogWrapper)

SetLogger set a new logger

func (*LarkMiddleware) SetMessageKey

func (opt *LarkMiddleware) SetMessageKey(key string) *LarkMiddleware

SetMessageKey .

func (*LarkMiddleware) WithEncryption

func (opt *LarkMiddleware) WithEncryption(key string) *LarkMiddleware

WithEncryption .

func (*LarkMiddleware) WithTokenVerification

func (opt *LarkMiddleware) WithTokenVerification(token string) *LarkMiddleware

WithTokenVerification .

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL