@@ -16,10 +16,9 @@ import (
1616// 并发时返回 "您有操作正在执行, 请稍后再试!"
1717var DefaultSingle = nano .NewSingle (
1818 nano .WithKeyFn (func (ctx * nano.Ctx ) int64 {
19- switch msg := ctx .Value .(type ) {
19+ switch ctx .Value .(type ) {
2020 case * nano.Message :
21- id , _ := strconv .ParseUint (msg .Author .ID , 10 , 64 )
22- return int64 (id )
21+ return int64 (ctx .UserID ())
2322 }
2423 return 0
2524 }),
@@ -53,17 +52,26 @@ func SetDefaultLimiterManagerParam(interval time.Duration, burst int) {
5352//
5453// 按 发送者 限制
5554func LimitByUser (ctx * nano.Ctx ) * rate.Limiter {
56- if msg , ok := ctx .Value .(* nano.Message ); ok {
57- id , _ := strconv .ParseUint (msg .Author .ID , 10 , 64 )
58- return defaultLimiterManager .Load (int64 (id ))
55+ if _ , ok := ctx .Value .(* nano.Message ); ok {
56+ return defaultLimiterManager .Load (int64 (ctx .UserID ()))
5957 }
6058 return defaultLimiterManager .Load (0 )
6159}
6260
6361// LimitByGroup 默认限速器 每 10s 5次触发
6462//
65- // 按 guild 限制
63+ // 按 group 限制
6664func LimitByGroup (ctx * nano.Ctx ) * rate.Limiter {
65+ if _ , ok := ctx .Value .(* nano.Message ); ok {
66+ return defaultLimiterManager .Load (int64 (ctx .GroupID ()))
67+ }
68+ return defaultLimiterManager .Load (0 )
69+ }
70+
71+ // LimitByGuild 默认限速器 每 10s 5次触发
72+ //
73+ // 按 guild 限制
74+ func LimitByGuild (ctx * nano.Ctx ) * rate.Limiter {
6775 if msg , ok := ctx .Value .(* nano.Message ); ok {
6876 id , _ := strconv .ParseUint (msg .GuildID , 10 , 64 )
6977 return defaultLimiterManager .Load (int64 (id ))
@@ -75,9 +83,8 @@ func LimitByGroup(ctx *nano.Ctx) *rate.Limiter {
7583//
7684// 按 channel 限制
7785func LimitByChannel (ctx * nano.Ctx ) * rate.Limiter {
78- if msg , ok := ctx .Value .(* nano.Message ); ok {
79- id , _ := strconv .ParseUint (msg .ChannelID , 10 , 64 )
80- return defaultLimiterManager .Load (int64 (id ))
86+ if _ , ok := ctx .Value .(* nano.Message ); ok {
87+ return defaultLimiterManager .Load (int64 (ctx .GroupID ()))
8188 }
8289 return defaultLimiterManager .Load (0 )
8390}
@@ -97,31 +104,39 @@ func NewLimiterManager(interval time.Duration, burst int) (m LimiterManager) {
97104//
98105// 按 发送者 限制
99106func (m LimiterManager ) LimitByUser (ctx * nano.Ctx ) * rate.Limiter {
100- if msg , ok := ctx .Value .(* nano.Message ); ok {
101- id , _ := strconv .ParseUint (msg .Author .ID , 10 , 64 )
102- return defaultLimiterManager .Load (int64 (id ))
107+ if _ , ok := ctx .Value .(* nano.Message ); ok {
108+ return defaultLimiterManager .Load (int64 (ctx .UserID ()))
103109 }
104110 return defaultLimiterManager .Load (0 )
105111}
106112
107- // LimitByGroup 自定义限速器
113+ // LimitByGuild 自定义限速器
108114//
109115// 按 guild 限制
110- func (m LimiterManager ) LimitByGroup (ctx * nano.Ctx ) * rate.Limiter {
116+ func (m LimiterManager ) LimitByGuild (ctx * nano.Ctx ) * rate.Limiter {
111117 if msg , ok := ctx .Value .(* nano.Message ); ok {
112118 id , _ := strconv .ParseUint (msg .GuildID , 10 , 64 )
113119 return defaultLimiterManager .Load (int64 (id ))
114120 }
115121 return defaultLimiterManager .Load (0 )
116122}
117123
124+ // LimitByGroup 自定义限速器
125+ //
126+ // 按 group 限制
127+ func (m LimiterManager ) LimitByGroup (ctx * nano.Ctx ) * rate.Limiter {
128+ if _ , ok := ctx .Value .(* nano.Message ); ok {
129+ return defaultLimiterManager .Load (int64 (ctx .GroupID ()))
130+ }
131+ return defaultLimiterManager .Load (0 )
132+ }
133+
118134// LimitByChannel 自定义限速器
119135//
120136// 按 channel 限制
121137func (m LimiterManager ) LimitByChannel (ctx * nano.Ctx ) * rate.Limiter {
122- if msg , ok := ctx .Value .(* nano.Message ); ok {
123- id , _ := strconv .ParseUint (msg .ChannelID , 10 , 64 )
124- return defaultLimiterManager .Load (int64 (id ))
138+ if _ , ok := ctx .Value .(* nano.Message ); ok {
139+ return defaultLimiterManager .Load (int64 (ctx .GroupID ()))
125140 }
126141 return defaultLimiterManager .Load (0 )
127142}
0 commit comments