Skip to content

Commit

Permalink
feat: #18 不支持的API提供默认送信器配置
Browse files Browse the repository at this point in the history
Closes #18
  • Loading branch information
ForteScarlet committed Jan 8, 2021
1 parent abe3000 commit 2ce3709
Show file tree
Hide file tree
Showing 31 changed files with 414 additions and 233 deletions.
9 changes: 9 additions & 0 deletions UPDATE.MD
Original file line number Diff line number Diff line change
Expand Up @@ -387,6 +387,15 @@ simbot.core.logo.enable=true
### feature
- [#36](https://github.com/ForteScarlet/simpler-robot/issues/36) 优化事件触发机制,当不存在对应的监听函数时,不应当执行事件流程(例如触发拦截器)。

- [#18](https://github.com/ForteScarlet/simpler-robot/issues/18) 提供配置项:
```properties
# 默认(遇到不支持的API时使用的)送信器。
# 是枚举 love.forte.simbot.core.configuration.DefaultSenderType 的元素值。
# 默认为 'ERROR',即会抛出一个错误。
# 目前可选:ERROR (会直接抛出异常)、FAILED (会返回一个默认的失败返回值)
simbot.core.sender.default.type=ERROR

```

### fix
- [#39](https://github.com/ForteScarlet/simpler-robot/issues/39) 监听函数优先级失效
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,8 @@ import love.forte.simbot.component.lovelycat.message.result.*
*/
public class LovelyCatGetter(
private val botId: String,
private val api: LovelyCatApiTemplate
private val api: LovelyCatApiTemplate,
private val def: Getter
) : Getter {
/**
* 得到当前bot的权限信息。
Expand Down Expand Up @@ -111,13 +112,13 @@ public class LovelyCatGetter(
* 无法获取禁言列表。
*/
@Deprecated("Unable to get banned list.")
override fun getBanList(group: String, cache: Boolean, limit: Int): BanList = EmptyBanList
override fun getBanList(group: String, cache: Boolean, limit: Int) = def.getBanList(group, cache, limit)

/**
* 无法获取群公告。
*/
@Deprecated("Unable to get the group note list.")
override fun getGroupNoteList(group: String, cache: Boolean, limit: Int): GroupNoteList = EmptyGroupNoteList
override fun getGroupNoteList(group: String, cache: Boolean, limit: Int) = def.getGroupNoteList(group, cache, limit)



Expand All @@ -133,26 +134,26 @@ public class LovelyCatGetter(




/**
* empty [BanList].
*/
private object EmptyBanList : BanList {
override val originalData: String
get() = "EmptyBanList([])"

override val results: List<BanInfo>
get() = emptyList()
}


private object EmptyGroupNoteList : GroupNoteList {
override val originalData: String
get() = "EmptyGroupNoteList([])"

override val results: List<GroupNote>
get() = emptyList()
}
//
// /**
// * empty [BanList].
// */
// private object EmptyBanList : BanList {
// override val originalData: String
// get() = "EmptyBanList([])"
//
// override val results: List<BanInfo>
// get() = emptyList()
// }
//
//
// private object EmptyGroupNoteList : GroupNoteList {
// override val originalData: String
// get() = "EmptyGroupNoteList([])"
//
// override val results: List<GroupNote>
// get() = emptyList()
// }



Original file line number Diff line number Diff line change
Expand Up @@ -30,18 +30,18 @@ public class LovelyCatGetterFactory(private val apiManager: LovelyCatApiManager)
/**
* 根据一个msg构建一个 [Getter]. 用于在触发监听消息的时候构建其信息。
*/
override fun getOnMsgGetter(msg: MsgGet): Getter {
override fun getOnMsgGetter(msg: MsgGet, def: Getter.Def): Getter {
val botCode = msg.botInfo.botCode
val api = apiManager[botCode] ?: throw IllegalStateException("cannot found bot($botCode)'s api.")
return LovelyCatGetter(botCode, api)
return LovelyCatGetter(botCode, api, def)
}

/**
* 根据一个bot信息构建一个 [Getter]. 用于构建 [love.forte.simbot.core.bot.Bot] 实例。
*/
override fun getOnBotGetter(bot: BotContainer): Getter {
override fun getOnBotGetter(bot: BotContainer, def: Getter.Def): Getter {
val botCode = bot.botInfo.botCode
val api = apiManager[botCode] ?: throw IllegalStateException("cannot found bot($botCode)'s api.")
return LovelyCatGetter(botCode, api)
return LovelyCatGetter(botCode, api, def)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ import love.forte.simbot.api.message.MessageContent
import love.forte.simbot.api.message.assists.Flag
import love.forte.simbot.api.message.events.GroupMsg
import love.forte.simbot.api.message.events.PrivateMsg
import love.forte.simbot.api.sender.ErrorSender
import love.forte.simbot.api.sender.Sender
import love.forte.simbot.component.lovelycat.LovelyCatApiTemplate
import love.forte.simbot.component.lovelycat.message.LovelyCatForSendMessageContent
Expand All @@ -38,7 +37,8 @@ private object Empty
*/
public class LovelyCatSender(
private val botId: String,
private val api: LovelyCatApiTemplate
private val api: LovelyCatApiTemplate,
private val def: Sender
) : Sender {

/**
Expand Down Expand Up @@ -342,7 +342,7 @@ public class LovelyCatSender(
*/
@Deprecated("Not support")
override fun sendGroupSign(group: String, title: String, message: String): Carrier<Boolean> {
ErrorSender.sendGroupSign(group, title, message)
return def.sendGroupSign(group, title, message)
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,18 +32,18 @@ public class LovelyCatSenderFactory(private val apiManager: LovelyCatApiManager)
/**
* 根据一个msg构建一个 [Sender]. 用于在触发监听消息的时候构建其信息。
*/
override fun getOnMsgSender(msg: MsgGet): Sender {
override fun getOnMsgSender(msg: MsgGet, def: Sender.Def): Sender {
val botCode = msg.botInfo.botCode
val api = apiManager[botCode] ?: throw IllegalStateException("cannot found bot($botCode)'s api.")
return LovelyCatSender(botCode, api)
return LovelyCatSender(botCode, api, def)
}

/**
* 根据一个bot信息构建一个 [Sender]. 用于构建 [love.forte.simbot.core.bot.Bot] 实例。
*/
override fun getOnBotSender(bot: BotContainer): Sender {
override fun getOnBotSender(bot: BotContainer, def: Sender.Def): Sender {
val botCode = bot.botInfo.botCode
val api = apiManager[botCode] ?: throw IllegalStateException("cannot found bot($botCode)'s api.")
return LovelyCatSender(botCode, api)
return LovelyCatSender(botCode, api, def)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@ import love.forte.simbot.api.message.assists.Flag
import love.forte.simbot.api.message.events.FriendAddRequest
import love.forte.simbot.api.message.events.GroupAddRequest
import love.forte.simbot.api.message.events.MessageGet
import love.forte.simbot.api.sender.ErrorSetter
import love.forte.simbot.api.sender.Setter
import love.forte.simbot.component.lovelycat.LovelyCatApiTemplate
import java.util.concurrent.TimeUnit
Expand All @@ -33,7 +32,8 @@ import java.util.concurrent.TimeUnit
*/
public class LovelyCatSetter(
private val botId: String,
private val api: LovelyCatApiTemplate
private val api: LovelyCatApiTemplate,
private val def: Setter
) : Setter {
override fun setFriendAddRequest(
flag: Flag<FriendAddRequest.FlagContent>,
Expand All @@ -56,27 +56,26 @@ public class LovelyCatSetter(
}

override fun setGroupAdmin(groupCode: String, memberCode: String, promotion: Boolean): Carrier<Boolean> {
ErrorSetter.setGroupAdmin(groupCode, memberCode, promotion)
return def.setGroupAdmin(groupCode, memberCode, promotion)
}

override fun setGroupAnonymous(group: String, agree: Boolean): Carrier<Boolean> {
ErrorSetter.setGroupAnonymous(group, agree)
return def.setGroupAnonymous(group, agree)
}

override fun setGroupBan(groupCode: String, memberCode: String, time: Long, timeUnit: TimeUnit): Carrier<Boolean> {
ErrorSetter.setGroupBan(groupCode, memberCode, time, timeUnit)
return def.setGroupBan(groupCode, memberCode, time, timeUnit)
}

override fun setGroupWholeBan(groupCode: String, ban: Boolean): Carrier<Boolean> {
ErrorSetter.setGroupWholeBan(groupCode, ban)
return def.setGroupWholeBan(groupCode, ban)
}

override fun setGroupRemark(groupCode: String, memberCode: String, remark: String?): Carrier<String> {
ErrorSetter.setGroupRemark(groupCode, memberCode, remark)
return def.setGroupRemark(groupCode, memberCode, remark)
}

override fun setGroupQuit(groupCode: String, forcibly: Boolean): Carrier<Boolean> {
// val result =
api.quitGroup(botId, groupCode)
// check success?
return true.toCarrier()
Expand All @@ -94,11 +93,11 @@ public class LovelyCatSetter(
}

override fun setGroupMemberSpecialTitle(groupCode: String, memberCode: String, title: String?): Carrier<String> {
ErrorSetter.setGroupMemberSpecialTitle(groupCode, memberCode, title)
return def.setGroupMemberSpecialTitle(groupCode, memberCode, title)
}

override fun setMsgRecall(flag: Flag<MessageGet.MessageFlagContent>): Carrier<Boolean> {
ErrorSetter.setMsgRecall(flag)
return def.setMsgRecall(flag)
}

override fun setGroupName(groupCode: String, name: String): Carrier<String> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,18 +33,18 @@ public class LovelyCatSetterFactory(private val apiManager: LovelyCatApiManager)
/**
* 根据一个msg构建一个 [Sender]. 用于在触发监听消息的时候构建其信息。
*/
override fun getOnMsgSetter(msg: MsgGet): Setter {
override fun getOnMsgSetter(msg: MsgGet, def: Setter.Def): Setter {
val botCode = msg.botInfo.botCode
val api = apiManager[botCode] ?: throw IllegalStateException("cannot found bot($botCode)'s api.")
return LovelyCatSetter(botCode, api)
return LovelyCatSetter(botCode, api, def)
}

/**
* 根据一个bot信息构建一个 [Sender]. 用于构建 [love.forte.simbot.core.bot.Bot] 实例。
*/
override fun getOnBotSetter(bot: BotContainer): Setter {
override fun getOnBotSetter(bot: BotContainer, def: Setter.Def): Setter {
val botCode = bot.botInfo.botCode
val api = apiManager[botCode] ?: throw IllegalStateException("cannot found bot($botCode)'s api.")
return LovelyCatSetter(botCode, api)
return LovelyCatSetter(botCode, api, def)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import love.forte.common.ioc.DependCenter
import love.forte.simbot.api.message.containers.BotContainer
import love.forte.simbot.api.message.containers.BotInfo
import love.forte.simbot.api.sender.BotSender
import love.forte.simbot.api.sender.DefaultMsgSenderFactories
import love.forte.simbot.api.sender.MsgSenderFactories
import love.forte.simbot.api.sender.toBotSender
import love.forte.simbot.bot.Bot
Expand Down Expand Up @@ -76,7 +77,9 @@ public class MiraiBotVerifier(

val botContainer = BotContainer { MiraiBotInfo(mBot, httpTemplate) }

val sender = msgSenderFactories.toBotSender(botContainer)
val defFactories = dependCenter[DefaultMsgSenderFactories::class.java]

val sender = msgSenderFactories.toBotSender(botContainer, defFactories)

// if started
if (miraiBotEventRegistrar.started) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ import love.forte.simbot.api.message.containers.BotInfo
import love.forte.simbot.api.message.containers.GroupCodeContainer
import love.forte.simbot.api.message.events.MsgGet
import love.forte.simbot.api.message.results.*
import love.forte.simbot.api.sender.ErrorGetter
import love.forte.simbot.api.sender.Getter
import love.forte.simbot.api.sender.GetterFactory
import love.forte.simbot.component.mirai.message.result.*
Expand All @@ -29,15 +28,17 @@ import net.mamoe.mirai.Bot


public class MiraiGetterFactory(private val http: HttpTemplate) : GetterFactory {
override fun getOnMsgGetter(msg: MsgGet): Getter = MiraiGetter(Bot.getInstance(msg.botInfo.botCodeNumber), http)
override fun getOnBotGetter(bot: BotContainer): Getter =
MiraiGetter(Bot.getInstance(bot.botInfo.botCodeNumber), http)
override fun getOnMsgGetter(msg: MsgGet, def: Getter.Def): Getter =
MiraiGetter(Bot.getInstance(msg.botInfo.botCodeNumber), http, defGetter = def)

override fun getOnBotGetter(bot: BotContainer, def: Getter.Def): Getter =
MiraiGetter(Bot.getInstance(bot.botInfo.botCodeNumber), http, defGetter = def)
}

public class MiraiGetter(
private val bot: Bot,
private val http: HttpTemplate,
private val defGetter: Getter = ErrorGetter,
private val defGetter: Getter,
) : Getter {
override val authInfo: AuthInfo
get() = MiraiAuthInfo(AndroidBotCookieUtils.cookies(bot))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@ import love.forte.simbot.api.message.containers.AccountCodeContainer
import love.forte.simbot.api.message.containers.BotContainer
import love.forte.simbot.api.message.containers.GroupCodeContainer
import love.forte.simbot.api.message.events.MsgGet
import love.forte.simbot.api.sender.ErrorSender
import love.forte.simbot.api.sender.Sender
import love.forte.simbot.api.sender.SenderFactory
import love.forte.simbot.component.mirai.message.event.MiraiGroupFlagContent
Expand All @@ -40,15 +39,16 @@ import net.mamoe.mirai.message.data.MessageChain


public object MiraiSenderFactory : SenderFactory {
override fun getOnMsgSender(msg: MsgGet): Sender {
override fun getOnMsgSender(msg: MsgGet, def: Sender.Def): Sender {
return if (msg is MiraiMessageMsgGet<*>) {
MiraiSender(Bot.getInstance(msg.botInfo.botCodeNumber), msg.subject, msg.message)
MiraiSender(Bot.getInstance(msg.botInfo.botCodeNumber), msg.subject, msg.message, def)
} else {
MiraiSender(Bot.getInstance(msg.botInfo.botCodeNumber))
MiraiSender(Bot.getInstance(msg.botInfo.botCodeNumber), defSender = def)
}
}

override fun getOnBotSender(bot: BotContainer): Sender = MiraiSender(Bot.getInstance(bot.botInfo.botCodeNumber))
override fun getOnBotSender(bot: BotContainer, def: Sender.Def): Sender =
MiraiSender(Bot.getInstance(bot.botInfo.botCodeNumber), defSender = def)
}


Expand All @@ -62,7 +62,7 @@ public class MiraiSender(
/** 当前收到的消息。如果是一个botSender则会为null。 */
private val message: MessageChain? = null,
/** 默认送信器。 */
private val defSender: Sender = ErrorSender
private val defSender: Sender,
) : Sender {


Expand Down Expand Up @@ -231,7 +231,7 @@ public class MiraiSender(
*/
@Deprecated("mirai does not support api: group sign.")
override fun sendGroupSign(group: String, title: String, message: String): Carrier<Boolean> {
ErrorSender.sendGroupSign(group, title, message)
return defSender.sendGroupSign(group, title, message)
}

/**
Expand All @@ -240,7 +240,6 @@ public class MiraiSender(
*/
@Deprecated("mirai does not support api: group sign.")
override fun sendGroupSign(group: Long, title: String, message: String): Carrier<Boolean> {
ErrorSender.sendGroupSign(group, title, message)
return false.toCarrier()
return defSender.sendGroupSign(group, title, message)
}
}
Loading

0 comments on commit 2ce3709

Please sign in to comment.