Skip to content

Commit ee7a615

Browse files
authored
Merge pull request #57 from traPtitech/feat/expand-quotes
feat: 引用メッセージを展開するように
2 parents 70649ae + 601ef21 commit ee7a615

File tree

10 files changed

+329
-348
lines changed

10 files changed

+329
-348
lines changed

go.mod

Lines changed: 28 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,51 +1,49 @@
11
module github.com/traPtitech/BOT_GPT // replace with your own module name
22

3-
go 1.22
4-
5-
toolchain go1.22.0
3+
go 1.24.0
64

75
require (
8-
github.com/go-sql-driver/mysql v1.8.1
6+
github.com/go-sql-driver/mysql v1.9.3
97
github.com/jmoiron/sqlx v1.4.0
108
github.com/joho/godotenv v1.5.1
119
github.com/milvus-io/milvus-sdk-go/v2 v2.4.2
1210
github.com/openai/openai-go/v2 v2.7.1
13-
github.com/pressly/goose/v3 v3.20.0
14-
github.com/traPtitech/go-traq v0.0.0-20240509050113-9343acbeec35
15-
github.com/traPtitech/traq-ws-bot v1.1.3
11+
github.com/pressly/goose/v3 v3.26.0
12+
github.com/traPtitech/go-traq v0.0.0-20251201015624-285ca186fc5e
13+
github.com/traPtitech/traq-ws-bot v1.2.1
1614
)
1715

1816
require (
1917
filippo.io/edwards25519 v1.1.0 // indirect
20-
github.com/cockroachdb/errors v1.9.1 // indirect
21-
github.com/cockroachdb/logtags v0.0.0-20211118104740-dabe8e521a4f // indirect
22-
github.com/cockroachdb/redact v1.1.3 // indirect
23-
github.com/getsentry/sentry-go v0.12.0 // indirect
24-
github.com/gofrs/uuid v4.2.0+incompatible // indirect
18+
github.com/cockroachdb/errors v1.12.0 // indirect
19+
github.com/cockroachdb/logtags v0.0.0-20241215232642-bb51bb14a506 // indirect
20+
github.com/cockroachdb/redact v1.1.6 // indirect
21+
github.com/getsentry/sentry-go v0.41.0 // indirect
22+
github.com/gofrs/uuid/v5 v5.4.0 // indirect
2523
github.com/gogo/protobuf v1.3.2 // indirect
26-
github.com/golang/protobuf v1.5.3 // indirect
27-
github.com/google/go-cmp v0.6.0 // indirect
28-
github.com/gorilla/websocket v1.5.0 // indirect
29-
github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 // indirect
30-
github.com/kr/pretty v0.3.0 // indirect
24+
github.com/golang/protobuf v1.5.4 // indirect
25+
github.com/gorilla/websocket v1.5.3 // indirect
26+
github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 // indirect
27+
github.com/kr/pretty v0.3.1 // indirect
3128
github.com/kr/text v0.2.0 // indirect
3229
github.com/mfridman/interpolate v0.0.2 // indirect
3330
github.com/milvus-io/milvus-proto/go-api/v2 v2.4.10-0.20240819025435-512e3b98866a // indirect
31+
github.com/motoki317/sc v1.8.2 // indirect
3432
github.com/pkg/errors v0.9.1 // indirect
35-
github.com/rogpeppe/go-internal v1.8.1 // indirect
36-
github.com/sethvargo/go-retry v0.2.4 // indirect
37-
github.com/stretchr/testify v1.8.4 // indirect
38-
github.com/tidwall/gjson v1.14.4 // indirect
39-
github.com/tidwall/match v1.1.1 // indirect
33+
github.com/rogpeppe/go-internal v1.14.1 // indirect
34+
github.com/sethvargo/go-retry v0.3.0 // indirect
35+
github.com/tidwall/gjson v1.18.0 // indirect
36+
github.com/tidwall/match v1.2.0 // indirect
4037
github.com/tidwall/pretty v1.2.1 // indirect
4138
github.com/tidwall/sjson v1.2.5 // indirect
4239
go.uber.org/multierr v1.11.0 // indirect
43-
golang.org/x/net v0.34.0 // indirect
44-
golang.org/x/oauth2 v0.20.0 // indirect
45-
golang.org/x/sync v0.10.0 // indirect
46-
golang.org/x/sys v0.29.0 // indirect
47-
golang.org/x/text v0.21.0 // indirect
48-
google.golang.org/genproto/googleapis/rpc v0.0.0-20231106174013-bbf56f31fb17 // indirect
49-
google.golang.org/grpc v1.59.0 // indirect
50-
google.golang.org/protobuf v1.33.0 // indirect
40+
golang.org/x/net v0.49.0 // indirect
41+
golang.org/x/oauth2 v0.34.0 // indirect
42+
golang.org/x/sync v0.19.0 // indirect
43+
golang.org/x/sys v0.40.0 // indirect
44+
golang.org/x/text v0.33.0 // indirect
45+
google.golang.org/genproto/googleapis/rpc v0.0.0-20260126211449-d11affda4bed // indirect
46+
google.golang.org/grpc v1.78.0 // indirect
47+
google.golang.org/protobuf v1.36.11 // indirect
48+
gopkg.in/validator.v2 v2.0.1 // indirect
5149
)

go.sum

Lines changed: 104 additions & 293 deletions
Large diffs are not rendered by default.

internal/bot/bot.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ func InitBot() {
2626
log.Fatalf("error: Bot変数が作れなかった!: %v", err)
2727
}
2828

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

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

7979
return err
8080
}
8181

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

8686
return err
8787
}
8888

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

104104
func GetBots() []traq.Bot {
105105
bot := GetBot()
106-
Bots, _, err := bot.API().BotApi.GetBots(context.Background()).Execute()
106+
Bots, _, err := bot.API().BotAPI.GetBots(context.Background()).Execute()
107107
if err != nil {
108108
fmt.Println(err)
109109
}

internal/bot/channel.go

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package bot
2+
3+
import (
4+
"context"
5+
"time"
6+
7+
"github.com/motoki317/sc"
8+
)
9+
10+
func getChannelPathInternal(ctx context.Context, channelID string) (string, error) {
11+
bot := GetBot()
12+
13+
path, _, err := bot.API().ChannelAPI.GetChannelPath(ctx, channelID).Execute()
14+
if err != nil {
15+
return "", err
16+
}
17+
18+
return path.Path, nil
19+
}
20+
21+
var channelPathCache = sc.NewMust(getChannelPathInternal, time.Hour, time.Hour, nil)
22+
23+
func GetChannelPath(channelID string) (string, error) {
24+
return channelPathCache.Get(context.Background(), channelID)
25+
}

internal/bot/file.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,20 @@ package bot
33
import (
44
"context"
55
"encoding/base64"
6-
"github.com/traPtitech/go-traq"
76
"io"
87
"log"
98
"os"
109
"regexp"
1110
"strings"
11+
12+
"github.com/traPtitech/go-traq"
1213
)
1314

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

1718
fileInfo, _, err := bot.API().
18-
FileApi.GetFileMeta(context.Background(), fileID).
19+
FileAPI.GetFileMeta(context.Background(), fileID).
1920
Execute()
2021
if err != nil {
2122
log.Println(err)
@@ -28,7 +29,7 @@ func GetFileData(fileID string) *os.File {
2829
bot := GetBot()
2930

3031
fileData, _, err := bot.API().
31-
FileApi.GetFile(context.Background(), fileID).
32+
FileAPI.GetFile(context.Background(), fileID).
3233
Execute()
3334
if err != nil {
3435
log.Println(err)

internal/bot/message.go

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ func (message *TraqMessage) Edit(content string) error {
1616
bot := GetBot()
1717

1818
_, err := bot.API().
19-
MessageApi.EditMessage(context.Background(), message.Id).PostMessageRequest(traq.PostMessageRequest{
19+
MessageAPI.EditMessage(context.Background(), message.Id).PostMessageRequest(traq.PostMessageRequest{
2020
Content: content,
2121
}).Execute()
2222

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

3030
message, _, err := bot.API().
31-
MessageApi.
31+
MessageAPI.
3232
PostMessage(context.Background(), channelID).
3333
PostMessageRequest(traq.PostMessageRequest{
3434
Content: content,
@@ -46,7 +46,7 @@ func PostMessageWithErr(channelID string, content string) (*traq.Message, error)
4646
bot := GetBot()
4747

4848
message, _, err := bot.API().
49-
MessageApi.
49+
MessageAPI.
5050
PostMessage(context.Background(), channelID).
5151
PostMessageRequest(traq.PostMessageRequest{
5252
Content: content,
@@ -64,7 +64,7 @@ func EditMessage(messageID string, content string) {
6464
bot := GetBot()
6565

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

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

9999
message, _, err := bot.API().
100-
MessageApi.
100+
MessageAPI.
101101
GetMessage(context.Background(), messageID).
102102
Execute()
103103
if err != nil {
@@ -122,7 +122,7 @@ func GetMessages(text string) *traq.MessageSearchResult {
122122
bot := GetBot()
123123

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

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

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

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

195195
res, err := bot.API().
196-
MessageApi.DeleteMessage(context.Background(), messageID).
196+
MessageAPI.DeleteMessage(context.Background(), messageID).
197197
Execute()
198198
if err != nil {
199199
res2, err2 := io.ReadAll(res.Body)

internal/bot/user.go

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package bot
2+
3+
import (
4+
"context"
5+
"time"
6+
7+
"github.com/motoki317/sc"
8+
"github.com/traPtitech/go-traq"
9+
)
10+
11+
func getUserInternal(ctx context.Context, userID string) (*traq.UserDetail, error) {
12+
bot := GetBot()
13+
14+
user, _, err := bot.API().UserAPI.GetUser(ctx, userID).Execute()
15+
if err != nil {
16+
return nil, err
17+
}
18+
19+
return user, nil
20+
}
21+
22+
var userCache = sc.NewMust(getUserInternal, time.Hour, time.Hour, nil)
23+
24+
func GetUser(userID string) (*traq.UserDetail, error) {
25+
return userCache.Get(context.Background(), userID)
26+
}

internal/handler/OnDirectMessageCreated.go

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
package handler
22

33
import (
4+
"log"
5+
46
"github.com/traPtitech/BOT_GPT/internal/bot"
7+
"github.com/traPtitech/BOT_GPT/internal/pkg/formatter"
58
"github.com/traPtitech/traq-ws-bot/payload"
6-
"log"
79
)
810

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

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

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

25-
messageReceived(p.Message.Text, plainTextWithoutMention, p.Message.ChannelID)
32+
messageReceived(p.Message.Text, formattedMessage, p.Message.ChannelID)
2633
}
2734
}

internal/handler/OnMessageCreated.go

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
package handler
22

33
import (
4+
"log"
5+
46
"github.com/traPtitech/BOT_GPT/internal/bot"
7+
"github.com/traPtitech/BOT_GPT/internal/pkg/formatter"
58
"github.com/traPtitech/traq-ws-bot/payload"
6-
"log"
79
)
810

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

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

21-
messageReceived(p.Message.Text, plainTextWithoutMention, p.Message.ChannelID)
28+
messageReceived(p.Message.Text, formattedMessage, p.Message.ChannelID)
2229
}
2330
}

0 commit comments

Comments
 (0)