Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 28 additions & 30 deletions go.mod
Original file line number Diff line number Diff line change
@@ -1,51 +1,49 @@
module github.com/traPtitech/BOT_GPT // replace with your own module name

go 1.22

toolchain go1.22.0
go 1.24.0

require (
github.com/go-sql-driver/mysql v1.8.1
github.com/go-sql-driver/mysql v1.9.3
github.com/jmoiron/sqlx v1.4.0
github.com/joho/godotenv v1.5.1
github.com/milvus-io/milvus-sdk-go/v2 v2.4.2
github.com/openai/openai-go/v2 v2.7.1
github.com/pressly/goose/v3 v3.20.0
github.com/traPtitech/go-traq v0.0.0-20240509050113-9343acbeec35
github.com/traPtitech/traq-ws-bot v1.1.3
github.com/pressly/goose/v3 v3.26.0
github.com/traPtitech/go-traq v0.0.0-20251201015624-285ca186fc5e
github.com/traPtitech/traq-ws-bot v1.2.1
)

require (
filippo.io/edwards25519 v1.1.0 // indirect
github.com/cockroachdb/errors v1.9.1 // indirect
github.com/cockroachdb/logtags v0.0.0-20211118104740-dabe8e521a4f // indirect
github.com/cockroachdb/redact v1.1.3 // indirect
github.com/getsentry/sentry-go v0.12.0 // indirect
github.com/gofrs/uuid v4.2.0+incompatible // indirect
github.com/cockroachdb/errors v1.12.0 // indirect
github.com/cockroachdb/logtags v0.0.0-20241215232642-bb51bb14a506 // indirect
github.com/cockroachdb/redact v1.1.6 // indirect
github.com/getsentry/sentry-go v0.41.0 // indirect
github.com/gofrs/uuid/v5 v5.4.0 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang/protobuf v1.5.3 // indirect
github.com/google/go-cmp v0.6.0 // indirect
github.com/gorilla/websocket v1.5.0 // indirect
github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 // indirect
github.com/kr/pretty v0.3.0 // indirect
github.com/golang/protobuf v1.5.4 // indirect
github.com/gorilla/websocket v1.5.3 // indirect
github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 // indirect
github.com/kr/pretty v0.3.1 // indirect
github.com/kr/text v0.2.0 // indirect
github.com/mfridman/interpolate v0.0.2 // indirect
github.com/milvus-io/milvus-proto/go-api/v2 v2.4.10-0.20240819025435-512e3b98866a // indirect
github.com/motoki317/sc v1.8.2 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/rogpeppe/go-internal v1.8.1 // indirect
github.com/sethvargo/go-retry v0.2.4 // indirect
github.com/stretchr/testify v1.8.4 // indirect
github.com/tidwall/gjson v1.14.4 // indirect
github.com/tidwall/match v1.1.1 // indirect
github.com/rogpeppe/go-internal v1.14.1 // indirect
github.com/sethvargo/go-retry v0.3.0 // indirect
github.com/tidwall/gjson v1.18.0 // indirect
github.com/tidwall/match v1.2.0 // indirect
github.com/tidwall/pretty v1.2.1 // indirect
github.com/tidwall/sjson v1.2.5 // indirect
go.uber.org/multierr v1.11.0 // indirect
golang.org/x/net v0.34.0 // indirect
golang.org/x/oauth2 v0.20.0 // indirect
golang.org/x/sync v0.10.0 // indirect
golang.org/x/sys v0.29.0 // indirect
golang.org/x/text v0.21.0 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20231106174013-bbf56f31fb17 // indirect
google.golang.org/grpc v1.59.0 // indirect
google.golang.org/protobuf v1.33.0 // indirect
golang.org/x/net v0.49.0 // indirect
golang.org/x/oauth2 v0.34.0 // indirect
golang.org/x/sync v0.19.0 // indirect
golang.org/x/sys v0.40.0 // indirect
golang.org/x/text v0.33.0 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20260126211449-d11affda4bed // indirect
google.golang.org/grpc v1.78.0 // indirect
google.golang.org/protobuf v1.36.11 // indirect
gopkg.in/validator.v2 v2.0.1 // indirect
)
397 changes: 104 additions & 293 deletions go.sum

Large diffs are not rendered by default.

10 changes: 5 additions & 5 deletions internal/bot/bot.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ func InitBot() {
log.Fatalf("error: Bot変数が作れなかった!: %v", err)
}

botInfo, res, err := bot.API().MeApi.GetMe(context.Background()).Execute()
botInfo, res, err := bot.API().MeAPI.GetMe(context.Background()).Execute()
if err != nil || res.StatusCode != 200 {
log.Fatalf("error: 自分の情報を取得できませんでした: %v", err)
}
Expand Down Expand Up @@ -74,21 +74,21 @@ func GetBot() *traqwsbot.Bot {

func Join(ChannelID string) error {
bot := GetBot()
_, err := bot.API().BotApi.LetBotJoinChannel(context.Background(), Info.Id).PostBotActionJoinRequest(traq.PostBotActionJoinRequest{ChannelId: ChannelID}).Execute()
_, err := bot.API().BotAPI.LetBotJoinChannel(context.Background(), Info.Id).PostBotActionJoinRequest(traq.PostBotActionJoinRequest{ChannelId: ChannelID}).Execute()

return err
}

func Leave(ChannelID string) error {
bot := GetBot()
_, err := bot.API().BotApi.LetBotLeaveChannel(context.Background(), Info.Id).PostBotActionLeaveRequest(traq.PostBotActionLeaveRequest{ChannelId: ChannelID}).Execute()
_, err := bot.API().BotAPI.LetBotLeaveChannel(context.Background(), Info.Id).PostBotActionLeaveRequest(traq.PostBotActionLeaveRequest{ChannelId: ChannelID}).Execute()

return err
}

func IsBotJoined(ChannelID string) (bool, error) {
bot := GetBot()
bots, _, err := bot.API().BotApi.GetChannelBots(context.Background(), ChannelID).Execute()
bots, _, err := bot.API().BotAPI.GetChannelBots(context.Background(), ChannelID).Execute()
if err != nil {
return false, err
}
Expand All @@ -103,7 +103,7 @@ func IsBotJoined(ChannelID string) (bool, error) {

func GetBots() []traq.Bot {
bot := GetBot()
Bots, _, err := bot.API().BotApi.GetBots(context.Background()).Execute()
Bots, _, err := bot.API().BotAPI.GetBots(context.Background()).Execute()
if err != nil {
fmt.Println(err)
}
Expand Down
25 changes: 25 additions & 0 deletions internal/bot/channel.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package bot

import (
"context"
"time"

"github.com/motoki317/sc"
)

func getChannelPathInternal(ctx context.Context, channelID string) (string, error) {
bot := GetBot()

path, _, err := bot.API().ChannelAPI.GetChannelPath(ctx, channelID).Execute()
if err != nil {
return "", err
}

return path.Path, nil
}

var channelPathCache = sc.NewMust(getChannelPathInternal, time.Hour, time.Hour, nil)

func GetChannelPath(channelID string) (string, error) {
return channelPathCache.Get(context.Background(), channelID)
}
7 changes: 4 additions & 3 deletions internal/bot/file.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,20 @@ package bot
import (
"context"
"encoding/base64"
"github.com/traPtitech/go-traq"
"io"
"log"
"os"
"regexp"
"strings"

"github.com/traPtitech/go-traq"
)

func GetFileMetadata(fileID string) *traq.FileInfo {
bot := GetBot()

fileInfo, _, err := bot.API().
FileApi.GetFileMeta(context.Background(), fileID).
FileAPI.GetFileMeta(context.Background(), fileID).
Execute()
if err != nil {
log.Println(err)
Expand All @@ -28,7 +29,7 @@ func GetFileData(fileID string) *os.File {
bot := GetBot()

fileData, _, err := bot.API().
FileApi.GetFile(context.Background(), fileID).
FileAPI.GetFile(context.Background(), fileID).
Execute()
if err != nil {
log.Println(err)
Expand Down
26 changes: 13 additions & 13 deletions internal/bot/message.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ func (message *TraqMessage) Edit(content string) error {
bot := GetBot()

_, err := bot.API().
MessageApi.EditMessage(context.Background(), message.Id).PostMessageRequest(traq.PostMessageRequest{
MessageAPI.EditMessage(context.Background(), message.Id).PostMessageRequest(traq.PostMessageRequest{
Content: content,
}).Execute()

Expand All @@ -28,7 +28,7 @@ func PostMessage(channelID string, content string) *traq.Message {
bot := GetBot()

message, _, err := bot.API().
MessageApi.
MessageAPI.
PostMessage(context.Background(), channelID).
PostMessageRequest(traq.PostMessageRequest{
Content: content,
Expand All @@ -46,7 +46,7 @@ func PostMessageWithErr(channelID string, content string) (*traq.Message, error)
bot := GetBot()

message, _, err := bot.API().
MessageApi.
MessageAPI.
PostMessage(context.Background(), channelID).
PostMessageRequest(traq.PostMessageRequest{
Content: content,
Expand All @@ -64,7 +64,7 @@ func EditMessage(messageID string, content string) {
bot := GetBot()

_, err := bot.API().
MessageApi.EditMessage(context.Background(), messageID).PostMessageRequest(traq.PostMessageRequest{
MessageAPI.EditMessage(context.Background(), messageID).PostMessageRequest(traq.PostMessageRequest{
Content: content,
}).Execute()
if err != nil {
Expand All @@ -77,7 +77,7 @@ func EditMessageWithErr(messageID string, content string) error {
bot := GetBot()

res, err := bot.API().
MessageApi.EditMessage(context.Background(), messageID).PostMessageRequest(traq.PostMessageRequest{
MessageAPI.EditMessage(context.Background(), messageID).PostMessageRequest(traq.PostMessageRequest{
Content: content,
}).Execute()
if err != nil {
Expand All @@ -97,7 +97,7 @@ func GetMessage(messageID string) *traq.Message {
bot := GetBot()

message, _, err := bot.API().
MessageApi.
MessageAPI.
GetMessage(context.Background(), messageID).
Execute()
if err != nil {
Expand All @@ -122,7 +122,7 @@ func GetMessages(text string) *traq.MessageSearchResult {
bot := GetBot()

messages, _, err := bot.API().
MessageApi.
MessageAPI.
SearchMessages(context.Background()).Word(text).
Execute()
if err != nil {
Expand All @@ -136,8 +136,8 @@ func GetMessagesFromUser(userID string, limit int, offset int, before time.Time)
bot := GetBot()

messages, res, err := bot.API().
MessageApi.
SearchMessages(context.Background()).From(userID).Limit(int32(limit)).Offset(int32(offset)).Before(before).
MessageAPI.
SearchMessages(context.Background()).From([]string{userID}).Limit(int32(limit)).Offset(int32(offset)).Before(before).
Execute()
if err != nil {
res2, err2 := io.ReadAll(res.Body)
Expand All @@ -155,7 +155,7 @@ func GetMessagesFromPeriod(after time.Time, before time.Time, limit int, offset
bot := GetBot()

messages, res, err := bot.API().
MessageApi.
MessageAPI.
SearchMessages(context.Background()).Limit(int32(limit)).Offset(int32(offset)).Before(before).After(after).
Execute()
if err != nil {
Expand All @@ -174,8 +174,8 @@ func GetMessagesFromChannelFrom(after time.Time, before time.Time, limit int, of
bot := GetBot()

messages, res, err := bot.API().
MessageApi.
SearchMessages(context.Background()).Limit(int32(limit)).Offset(int32(offset)).Before(before).After(after).From(userID).In(channelID).
MessageAPI.
SearchMessages(context.Background()).Limit(int32(limit)).Offset(int32(offset)).Before(before).After(after).From([]string{userID}).In(channelID).
Execute()
if err != nil {
res2, err2 := io.ReadAll(res.Body)
Expand All @@ -193,7 +193,7 @@ func DeleteMessage(messageID string) error {
bot := GetBot()

res, err := bot.API().
MessageApi.DeleteMessage(context.Background(), messageID).
MessageAPI.DeleteMessage(context.Background(), messageID).
Execute()
if err != nil {
res2, err2 := io.ReadAll(res.Body)
Expand Down
26 changes: 26 additions & 0 deletions internal/bot/user.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package bot

import (
"context"
"time"

"github.com/motoki317/sc"
"github.com/traPtitech/go-traq"
)

func getUserInternal(ctx context.Context, userID string) (*traq.UserDetail, error) {
bot := GetBot()

user, _, err := bot.API().UserAPI.GetUser(ctx, userID).Execute()
if err != nil {
return nil, err
}

return user, nil
}

var userCache = sc.NewMust(getUserInternal, time.Hour, time.Hour, nil)

func GetUser(userID string) (*traq.UserDetail, error) {
return userCache.Get(context.Background(), userID)
}
11 changes: 9 additions & 2 deletions internal/handler/OnDirectMessageCreated.go
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
package handler

import (
"log"

"github.com/traPtitech/BOT_GPT/internal/bot"
"github.com/traPtitech/BOT_GPT/internal/pkg/formatter"
"github.com/traPtitech/traq-ws-bot/payload"
"log"
)

func (h *Handler) DirectMessageReceived() func(p *payload.DirectMessageCreated) {
Expand All @@ -17,11 +19,16 @@ func (h *Handler) DirectMessageReceived() func(p *payload.DirectMessageCreated)
}

plainTextWithoutMention := bot.RemoveFirstBotID(p.Message.PlainText)
formattedMessage, err := formatter.FormatQuotedMessage(p.Message.User.ID, plainTextWithoutMention)
if err != nil {
log.Printf("Error formatting quoted message: %v\n", err)
formattedMessage = plainTextWithoutMention
}

if p.Message.User.Name != "pikachu" {
_ = bot.PostMessage(p.Message.ChannelID, "DMではあんまり沢山使わないでね。定期的な`/reset`を忘れない事。")
}

messageReceived(p.Message.Text, plainTextWithoutMention, p.Message.ChannelID)
messageReceived(p.Message.Text, formattedMessage, p.Message.ChannelID)
}
}
11 changes: 9 additions & 2 deletions internal/handler/OnMessageCreated.go
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
package handler

import (
"log"

"github.com/traPtitech/BOT_GPT/internal/bot"
"github.com/traPtitech/BOT_GPT/internal/pkg/formatter"
"github.com/traPtitech/traq-ws-bot/payload"
"log"
)

func (h *Handler) MessageReceived() func(p *payload.MessageCreated) {
Expand All @@ -17,7 +19,12 @@ func (h *Handler) MessageReceived() func(p *payload.MessageCreated) {
}

plainTextWithoutMention := bot.RemoveFirstBotID(p.Message.PlainText)
formattedMessage, err := formatter.FormatQuotedMessage(p.Message.User.ID, plainTextWithoutMention)
if err != nil {
log.Printf("Error formatting quoted message: %v\n", err)
formattedMessage = plainTextWithoutMention
}

messageReceived(p.Message.Text, plainTextWithoutMention, p.Message.ChannelID)
messageReceived(p.Message.Text, formattedMessage, p.Message.ChannelID)
}
}
Loading
Loading