Closed2

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

not75743not75743
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ヶ月前にクローズされました