Skip to content

Commit 8bc39df

Browse files
committed
feat: add statics plugin for group chat statistics and visualization
1 parent 528ac56 commit 8bc39df

6 files changed

Lines changed: 754 additions & 4 deletions

File tree

base/config.go

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,12 @@ package base
22

33
import (
44
"encoding/json"
5-
"github.com/tidwall/pretty"
65
"log"
76
"os"
87
"sync"
98
"time"
9+
10+
"github.com/tidwall/pretty"
1011
)
1112

1213
var Config config
@@ -74,6 +75,24 @@ type config struct {
7475
IntervalTime int64 `json:"intervalTime"`
7576
SauceNAOToken string `json:"sauceNAOToken"`
7677
} `json:"picSearch"`
78+
Statics struct {
79+
Enable bool `json:"enable"`
80+
ChartArgsMap map[string]string `json:"chartArgsMap"`
81+
WordCloudArgsMap map[string]string `json:"wordCloudArgsMap"`
82+
StopWords []string `json:"stopWords"`
83+
RetentionDays int `json:"retentionDays"`
84+
DataDir string `json:"dataDir"`
85+
Chart struct {
86+
Width int `json:"width"`
87+
Height int `json:"height"`
88+
} `json:"chart"`
89+
WordCloud struct {
90+
Width int `json:"width"`
91+
Height int `json:"height"`
92+
MaxWords int `json:"maxWords"`
93+
FontFile string `json:"fontFile"`
94+
} `json:"wordCloud"`
95+
} `json:"statics"`
7796
ChatAI struct {
7897
Enable bool `json:"enable"`
7998
ChatGPT struct {

config.json.default

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,30 @@
6969
"intervalTime": 1800,
7070
"sauceNAOToken": ""
7171
},
72+
"statics": {
73+
"enable": false,
74+
"chartArgsMap": {
75+
"today": "/今日发言",
76+
"yesterday": "/昨日发言"
77+
},
78+
"wordCloudArgsMap": {
79+
"today": "/今日词云",
80+
"yesterday": "/昨日词云"
81+
},
82+
"stopWords": ["的", "了", "么", "啊", "吗", "你们", "我们", "http", "https"],
83+
"retentionDays": 3,
84+
"dataDir": "data/statics",
85+
"chart": {
86+
"width": 900,
87+
"height": 520
88+
},
89+
"wordCloud": {
90+
"width": 900,
91+
"height": 520,
92+
"maxWords": 80,
93+
"fontFile": "./NotoSansSC-Regular.ttf"
94+
}
95+
},
7296
"chatAI": {
7397
"enable": false,
7498
"chatGPT": {

go.mod

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,23 +24,30 @@ require (
2424
github.com/antchfx/xpath v1.3.5 // indirect
2525
github.com/cloudflare/circl v1.6.1 // indirect
2626
github.com/felixge/httpsnoop v1.0.4 // indirect
27+
github.com/fogleman/gg v1.3.0 // indirect
2728
github.com/go-logr/logr v1.4.3 // indirect
2829
github.com/go-logr/stdr v1.2.2 // indirect
30+
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect
2931
github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // indirect
3032
github.com/google/s2a-go v0.1.9 // indirect
33+
github.com/google/uuid v1.6.0 // indirect
3134
github.com/googleapis/enterprise-certificate-proxy v0.3.7 // indirect
3235
github.com/googleapis/gax-go/v2 v2.15.0 // indirect
3336
github.com/klauspost/compress v1.18.2 // indirect
3437
github.com/ncruces/julianday v1.0.0 // indirect
38+
github.com/psykhi/wordclouds v0.0.0-20231014190151-b9dd58fabbef // indirect
3539
github.com/stretchr/testify v1.11.1 // indirect
3640
github.com/tetratelabs/wazero v1.10.1 // indirect
3741
github.com/tidwall/match v1.1.1 // indirect
42+
github.com/wcharczuk/go-chart/v2 v2.1.2 // indirect
43+
github.com/yanyiwu/gojieba v1.4.6 // indirect
3844
go.opentelemetry.io/auto/sdk v1.2.1 // indirect
3945
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.63.0 // indirect
4046
go.opentelemetry.io/otel v1.38.0 // indirect
4147
go.opentelemetry.io/otel/metric v1.38.0 // indirect
4248
go.opentelemetry.io/otel/trace v1.38.0 // indirect
4349
golang.org/x/crypto v0.45.0 // indirect
50+
golang.org/x/image v0.18.0 // indirect
4451
golang.org/x/oauth2 v0.32.0 // indirect
4552
golang.org/x/sys v0.38.0 // indirect
4653
golang.org/x/text v0.31.0 // indirect

go.sum

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,13 +58,17 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c
5858
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
5959
github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
6060
github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
61+
github.com/fogleman/gg v1.3.0 h1:/7zJX8F6AaYQc57WQCyN9cAIz+4bCJGO9B+dyW29am8=
62+
github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k=
6163
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
6264
github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
6365
github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
6466
github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI=
6567
github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
6668
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
6769
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
70+
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g=
71+
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
6872
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
6973
github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 h1:f+oWsMOmNPc8JmEHVZIycC7hBoQxHH9pNKQORJNozsQ=
7074
github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8/go.mod h1:wcDNUvekVysuuOpQKo3191zZyTpiI6se1N1ULghS0sw=
@@ -73,6 +77,8 @@ github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
7377
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
7478
github.com/google/s2a-go v0.1.9 h1:LGD7gtMgezd8a/Xak7mEWL0PjoTQFvpRudN895yqKW0=
7579
github.com/google/s2a-go v0.1.9/go.mod h1:YA0Ei2ZQL3acow2O62kdp9UlnvMmU7kA6Eutn0dXayM=
80+
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
81+
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
7682
github.com/googleapis/enterprise-certificate-proxy v0.3.6 h1:GW/XbdyBFQ8Qe+YAmFU9uHLo7OnF5tL52HFAgMmyrf4=
7783
github.com/googleapis/enterprise-certificate-proxy v0.3.6/go.mod h1:MkHOF77EYAE7qfSuSS9PU6g4Nt4e11cnsDUowfwewLA=
7884
github.com/googleapis/enterprise-certificate-proxy v0.3.7 h1:zrn2Ee/nWmHulBx5sAVrGgAa0f2/R35S4DJwfFaUPFQ=
@@ -119,6 +125,8 @@ github.com/ncruces/julianday v1.0.0 h1:fH0OKwa7NWvniGQtxdJRxAgkBMolni2BjDHaWTxqt
119125
github.com/ncruces/julianday v1.0.0/go.mod h1:Dusn2KvZrrovOMJuOt0TNXL6tB7U2E8kvza5fFc9G7g=
120126
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
121127
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
128+
github.com/psykhi/wordclouds v0.0.0-20231014190151-b9dd58fabbef h1:ejUg635m79C08VhCZ/jbQUTyvIAbu+Px1rhqoFPq6W0=
129+
github.com/psykhi/wordclouds v0.0.0-20231014190151-b9dd58fabbef/go.mod h1:dQvaG/qpa4wU5tXfzQdHivHQ9ZDWKG0ha+3kKgUNYL4=
122130
github.com/refraction-networking/utls v1.6.7 h1:zVJ7sP1dJx/WtVuITug3qYUq034cDq9B2MR1K67ULZM=
123131
github.com/refraction-networking/utls v1.6.7/go.mod h1:BC3O4vQzye5hqpmDTWUqi4P5DDhzJfkV1tdqtawQIH0=
124132
github.com/refraction-networking/utls v1.7.1 h1:dxg+jla3uocgN8HtX+ccwDr68uCBBO3qLrkZUbqkcw0=
@@ -164,8 +172,12 @@ github.com/tidwall/pretty v1.2.1 h1:qjsOFOWWQl+N3RsoF5/ssm1pHmJJwhjlSbZ51I6wMl4=
164172
github.com/tidwall/pretty v1.2.1/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU=
165173
github.com/vinta/pangu v3.0.0+incompatible h1:kqW9Q5BrmWJkLJXLdxwbyPDjlizHUTpOCmHFCKfg1ZA=
166174
github.com/vinta/pangu v3.0.0+incompatible/go.mod h1:8n5gJh5l7U0Rbz6mjRK/09AiL0Bm+ugibEB+JhvxNNk=
175+
github.com/wcharczuk/go-chart/v2 v2.1.2 h1:Y17/oYNuXwZg6TFag06qe8sBajwwsuvPiJJXcUcLL6E=
176+
github.com/wcharczuk/go-chart/v2 v2.1.2/go.mod h1:Zi4hbaqlWpYajnXB2K22IUYVXRXaLfSGNNR7P4ukyyQ=
167177
github.com/xyproto/randomstring v1.0.5 h1:YtlWPoRdgMu3NZtP45drfy1GKoojuR7hmRcnhZqKjWU=
168178
github.com/xyproto/randomstring v1.0.5/go.mod h1:rgmS5DeNXLivK7YprL0pY+lTuhNQW3iGxZ18UQApw/E=
179+
github.com/yanyiwu/gojieba v1.4.6 h1:9oKbZijSHBdoTabXK34romSWj4aQLvs+j1ctIQjSxPk=
180+
github.com/yanyiwu/gojieba v1.4.6/go.mod h1:JUq4DddFVGdHXJHxxepxRmhrKlDpaBxR8O28v6fKYLY=
169181
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
170182
go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
171183
go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
@@ -225,6 +237,8 @@ golang.org/x/crypto v0.42.0 h1:chiH31gIWm57EkTXpwnqf8qeuMUi0yekh6mT2AvFlqI=
225237
golang.org/x/crypto v0.42.0/go.mod h1:4+rDnOTJhQCx2q7/j6rAN5XDw8kPjeaXEUR2eL94ix8=
226238
golang.org/x/crypto v0.45.0 h1:jMBrvKuj23MTlT0bQEOBcAE0mjg8mK9RXFhRH6nyF3Q=
227239
golang.org/x/crypto v0.45.0/go.mod h1:XTGrrkGJve7CYK7J8PEww4aY7gM3qMCElcJQ8n8JdX4=
240+
golang.org/x/image v0.18.0 h1:jGzIakQa/ZXI1I0Fxvaa9W7yP25TqT6cHIHn+6CqvSQ=
241+
golang.org/x/image v0.18.0/go.mod h1:4yyo5vMFQjVjUcVk4jEQcU9MGy/rulF5WvUILseCM2E=
228242
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
229243
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
230244
golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
@@ -314,6 +328,7 @@ golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
314328
golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
315329
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
316330
golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
331+
golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI=
317332
golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
318333
golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY=
319334
golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4=

main.go

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,8 @@ package main
22

33
import (
44
"MacArthurGo/base"
5-
_ "MacArthurGo/base"
65
"MacArthurGo/client"
76
_ "MacArthurGo/plugins"
8-
"fmt"
97
"io"
108
"log"
119
"os"
@@ -21,7 +19,7 @@ func main() {
2119
tz = time.FixedZone("Asia/Shanghai", 8*60*60)
2220
}
2321

24-
fileName := fmt.Sprintf(time.Now().In(tz).Format("20060102150405"))
22+
fileName := time.Now().In(tz).Format("20060102150405")
2523
logPath := filepath.Join(".", "log")
2624
if _, err := os.Stat(logPath); os.IsNotExist(err) {
2725
err = os.Mkdir(logPath, os.ModeDir|0755)

0 commit comments

Comments
 (0)