Closed2
ねこ画像を呼び出して遊ぶ

これの続き

package main
import (
"context"
"log"
"net/http"
"os"
"strings"
"github.com/aws/aws-lambda-go/events"
"github.com/aws/aws-lambda-go/lambda"
"github.com/google/uuid"
"github.com/line/line-bot-sdk-go/linebot"
)
var bot *linebot.Client
func init() {
// LINE のチャンネルシークレットは環境変数 "LINE_CHANNEL_SECRET" から取得
secret := os.Getenv("LINE_CHANNEL_SECRET")
// LINE のチャンネルアクセストークンは環境変数 "CHANNEL_ACCESS_TOKEN" から取得
accessToken := os.Getenv("CHANNEL_ACCESS_TOKEN")
var err error
bot, err = linebot.New(secret, accessToken)
if err != nil {
log.Fatalf("Error initializing LINE bot: %v", err)
}
}
func handler(ctx context.Context, req events.LambdaFunctionURLRequest) (events.LambdaFunctionURLResponse, error) {
// Lambda Function URL のリクエストから http.Request を生成
r, err := http.NewRequest("POST", "/", strings.NewReader(req.Body))
if err != nil {
log.Printf("Error creating HTTP request: %v", err)
return events.LambdaFunctionURLResponse{StatusCode: 500}, nil
}
// リクエストヘッダーを設定
for key, value := range req.Headers {
r.Header.Set(key, value)
}
// LINE の Webhook リクエストをパース
eventsList, err := bot.ParseRequest(r)
if err != nil {
// 署名検証エラーの場合は 400 を返す
if err == linebot.ErrInvalidSignature {
return events.LambdaFunctionURLResponse{StatusCode: 400}, nil
}
log.Printf("Error parsing request: %v", err)
return events.LambdaFunctionURLResponse{StatusCode: 500}, nil
}
// 各イベントに対して処理を実施
for _, event := range eventsList {
if event.Type == linebot.EventTypeMessage {
switch message := event.Message.(type) {
case *linebot.TextMessage:
// 各イベントごとに一意のIDを生成
reqID := uuid.New().String()
log.Printf("Event ID %s: received message: %s", reqID, message.Text)
// 「ねこ」「ぬこ」なら猫画像(jpg)
if message.Text == "ねこ" || message.Text == "ぬこ" {
catURL := "https://cataas.com/cat"
_, err := bot.ReplyMessage(
event.ReplyToken,
linebot.NewImageMessage(catURL, catURL),
).Do()
if err != nil {
log.Printf("Event ID %s: error replying with cat image: %v", reqID, err)
} else {
log.Printf("Event ID %s: replied with jpg", reqID)
}
} else if message.Text == "ねこgif" || message.Text == "ぬこgif" {
// 「ねこgif」「ぬこgif」なら猫GIF画像
catGifURL := "https://cataas.com/cat/gif"
_, err := bot.ReplyMessage(
event.ReplyToken,
linebot.NewImageMessage(catGifURL, catGifURL),
).Do()
if err != nil {
log.Printf("Event ID %s: error replying with cat GIF: %v", reqID, err)
} else {
log.Printf("Event ID %s: replied with gif", reqID)
}
} else {
log.Printf("Event ID %s: no matching keyword, no reply", reqID)
}
}
}
}
return events.LambdaFunctionURLResponse{
StatusCode: 200,
Body: "OK",
Headers: map[string]string{
"Content-Type": "text/plain",
},
}, nil
}
func main() {
lambda.Start(handler)
}
このスクラップは6ヶ月前にクローズされました