Skip to content

Commit 94dc0d2

Browse files
authored
Merge pull request #11 from simple-robot/dev/accept-reject-options
OneBotRequestEvent 的申请与拒绝支持可选的额外选项
2 parents c764087 + 301c9a1 commit 94dc0d2

File tree

2 files changed

+140
-10
lines changed

2 files changed

+140
-10
lines changed

simbot-component-onebot-v11/simbot-component-onebot-v11-core/src/commonMain/kotlin/love/forte/simbot/component/onebot/v11/core/event/internal/request/OneBotRequestEventImpl.kt

Lines changed: 46 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717

1818
package love.forte.simbot.component.onebot.v11.core.event.internal.request
1919

20+
import love.forte.simbot.ability.AcceptOption
21+
import love.forte.simbot.ability.RejectOption
2022
import love.forte.simbot.common.id.ID
2123
import love.forte.simbot.common.id.UUID
2224
import love.forte.simbot.component.onebot.v11.core.actor.OneBotGroup
@@ -29,9 +31,7 @@ import love.forte.simbot.component.onebot.v11.core.bot.OneBotBot
2931
import love.forte.simbot.component.onebot.v11.core.bot.internal.OneBotBotImpl
3032
import love.forte.simbot.component.onebot.v11.core.bot.requestDataBy
3133
import love.forte.simbot.component.onebot.v11.core.event.internal.eventToString
32-
import love.forte.simbot.component.onebot.v11.core.event.request.OneBotFriendRequestEvent
33-
import love.forte.simbot.component.onebot.v11.core.event.request.OneBotGroupRequestEvent
34-
import love.forte.simbot.component.onebot.v11.core.event.request.OneBotRequestEvent
34+
import love.forte.simbot.component.onebot.v11.core.event.request.*
3535
import love.forte.simbot.component.onebot.v11.event.request.FriendRequestEvent
3636
import love.forte.simbot.component.onebot.v11.event.request.GroupRequestEvent
3737

@@ -40,25 +40,47 @@ internal abstract class OneBotRequestEventImpl : OneBotRequestEvent {
4040
override val id: ID = UUID.random()
4141

4242
override suspend fun accept() {
43-
doSetRequest(true)
43+
doAccept(emptyArray())
44+
}
45+
46+
override suspend fun accept(vararg options: AcceptOption) {
47+
doAccept(options)
4448
}
4549

4650
override suspend fun reject() {
47-
doSetRequest(false)
51+
doReject(emptyArray())
4852
}
4953

50-
protected abstract suspend fun doSetRequest(approve: Boolean)
54+
override suspend fun reject(vararg options: RejectOption) {
55+
doReject(options)
56+
}
57+
58+
protected abstract suspend fun doAccept(options: Array<out AcceptOption>)
59+
protected abstract suspend fun doReject(options: Array<out RejectOption>)
5160
}
5261

5362
internal class OneBotFriendRequestEventImpl(
5463
override val sourceEventRaw: String?,
5564
override val sourceEvent: FriendRequestEvent,
5665
override val bot: OneBotBot,
5766
) : OneBotRequestEventImpl(), OneBotFriendRequestEvent {
58-
override suspend fun doSetRequest(approve: Boolean) {
67+
override suspend fun doAccept(options: Array<out AcceptOption>) {
68+
val remark: String? = (
69+
options.firstOrNull { it is OneBotFriendRequestAcceptOption.Remark }
70+
as? OneBotFriendRequestAcceptOption.Remark
71+
)?.remark
72+
5973
SetFriendAddRequestApi.create(
6074
flag = sourceEvent.flag,
61-
approve = approve,
75+
approve = true,
76+
remark = remark
77+
).requestDataBy(bot)
78+
}
79+
80+
override suspend fun doReject(options: Array<out RejectOption>) {
81+
SetFriendAddRequestApi.create(
82+
flag = sourceEvent.flag,
83+
approve = false,
6284
).requestDataBy(bot)
6385
}
6486

@@ -71,11 +93,25 @@ internal class OneBotGroupRequestEventImpl(
7193
override val sourceEvent: GroupRequestEvent,
7294
override val bot: OneBotBotImpl,
7395
) : OneBotRequestEventImpl(), OneBotGroupRequestEvent {
74-
override suspend fun doSetRequest(approve: Boolean) {
96+
override suspend fun doAccept(options: Array<out AcceptOption>) {
97+
SetGroupAddRequestApi.create(
98+
flag = sourceEvent.flag,
99+
subType = sourceEvent.subType,
100+
approve = true
101+
).requestDataBy(bot)
102+
}
103+
104+
override suspend fun doReject(options: Array<out RejectOption>) {
105+
val reason = (
106+
options.firstOrNull { it is OneBotGroupRequestRejectOption.Reason }
107+
as? OneBotGroupRequestRejectOption.Reason
108+
)?.reason
109+
75110
SetGroupAddRequestApi.create(
76111
flag = sourceEvent.flag,
77112
subType = sourceEvent.subType,
78-
approve = approve
113+
approve = false,
114+
reason = reason
79115
).requestDataBy(bot)
80116
}
81117

simbot-component-onebot-v11/simbot-component-onebot-v11-core/src/commonMain/kotlin/love/forte/simbot/component/onebot/v11/core/event/request/OneBotRequestEvent.kt

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717

1818
package love.forte.simbot.component.onebot.v11.core.event.request
1919

20+
import love.forte.simbot.ability.AcceptOption
21+
import love.forte.simbot.ability.RejectOption
2022
import love.forte.simbot.common.id.LongID
2123
import love.forte.simbot.component.onebot.v11.core.actor.OneBotGroup
2224
import love.forte.simbot.component.onebot.v11.core.actor.OneBotStranger
@@ -26,6 +28,8 @@ import love.forte.simbot.component.onebot.v11.event.request.GroupRequestEvent
2628
import love.forte.simbot.event.OrganizationJoinRequestEvent
2729
import love.forte.simbot.event.RequestEvent
2830
import love.forte.simbot.suspendrunner.STP
31+
import kotlin.jvm.JvmStatic
32+
import kotlin.jvm.JvmSynthetic
2933

3034
public typealias OBSourceRequestEvent = love.forte.simbot.component.onebot.v11.event.request.RequestEvent
3135

@@ -41,6 +45,30 @@ public typealias OBSourceRequestEvent = love.forte.simbot.component.onebot.v11.e
4145
*/
4246
public interface OneBotRequestEvent : OneBotBotEvent, RequestEvent {
4347
override val sourceEvent: OBSourceRequestEvent
48+
49+
/**
50+
* 接受请求
51+
*/
52+
@JvmSynthetic
53+
override suspend fun accept()
54+
55+
/**
56+
* 接受请求
57+
*/
58+
@JvmSynthetic
59+
override suspend fun accept(vararg options: AcceptOption)
60+
61+
/**
62+
* 拒绝请求
63+
*/
64+
@JvmSynthetic
65+
override suspend fun reject()
66+
67+
/**
68+
* 拒绝请求
69+
*/
70+
@JvmSynthetic
71+
override suspend fun reject(vararg options: RejectOption)
4472
}
4573

4674
/**
@@ -79,8 +107,41 @@ public interface OneBotFriendRequestEvent : OneBotRequestEvent {
79107
*/
80108
public val requesterId: LongID
81109
get() = sourceEvent.userId
110+
111+
/**
112+
* 接受申请。
113+
*
114+
* @param options 好友申请中可使用的额外属性,
115+
* 支持 [OneBotFriendRequestAcceptOption] 下的类型。
116+
*
117+
* @see OneBotFriendRequestAcceptOption
118+
*/
119+
@JvmSynthetic
120+
override suspend fun accept(vararg options: AcceptOption)
121+
}
122+
123+
124+
/**
125+
* 可使用于 [OneBotFriendRequestEvent.accept] 中的额外属性 [AcceptOption] 实现。
126+
*/
127+
public sealed class OneBotFriendRequestAcceptOption : AcceptOption {
128+
/**
129+
* 接受申请后为其设置一个备注
130+
*/
131+
public data class Remark(val remark: String) : OneBotFriendRequestAcceptOption()
132+
133+
134+
public companion object {
135+
/**
136+
* 接受申请后为其设置一个备注
137+
* @see Remark
138+
*/
139+
@JvmStatic
140+
public fun remark(remark: String): Remark = Remark(remark)
141+
}
82142
}
83143

144+
84145
/**
85146
* 群添加申请事件
86147
* @see GroupRequestEvent
@@ -135,4 +196,37 @@ public interface OneBotGroupRequestEvent : OneBotRequestEvent, OrganizationJoinR
135196
*/
136197
@STP
137198
override suspend fun requester(): OneBotStranger
199+
200+
/**
201+
* 拒绝申请。
202+
*
203+
* @param options 拒绝时可提供的额外选项。
204+
* 支持使用 [OneBotGroupRequestRejectOption] 下的类型。
205+
*
206+
* @see OneBotGroupRequestRejectOption
207+
*/
208+
@JvmSynthetic
209+
override suspend fun reject(vararg options: RejectOption)
210+
211+
}
212+
213+
214+
/**
215+
* 可使用于 [OneBotGroupRequestEvent.reject] 中的额外属性 [RejectOption] 实现。
216+
*/
217+
public sealed class OneBotGroupRequestRejectOption : RejectOption {
218+
/**
219+
* 拒绝的理由
220+
*/
221+
public data class Reason(val reason: String) : OneBotGroupRequestRejectOption()
222+
223+
public companion object {
224+
/**
225+
* 拒绝的理由
226+
*
227+
* @see Reason
228+
*/
229+
@JvmStatic
230+
public fun reason(reason: String): Reason = Reason(reason)
231+
}
138232
}

0 commit comments

Comments
 (0)