|
9 | 9 |
|
10 | 10 | package net.mamoe.mirai.auth
|
11 | 11 |
|
| 12 | +import net.mamoe.mirai.Bot |
12 | 13 | import net.mamoe.mirai.BotFactory
|
13 | 14 | import net.mamoe.mirai.Mirai
|
| 15 | +import net.mamoe.mirai.event.events.BotOfflineEvent |
14 | 16 | import net.mamoe.mirai.network.LoginFailedException
|
15 | 17 | import net.mamoe.mirai.network.RetryLaterException
|
16 | 18 | import net.mamoe.mirai.utils.*
|
@@ -102,6 +104,114 @@ public interface BotAuthInfo {
|
102 | 104 | public val id: Long
|
103 | 105 | public val deviceInfo: DeviceInfo
|
104 | 106 | public val configuration: BotConfiguration
|
| 107 | + |
| 108 | + /** |
| 109 | + * 是否是首次登录 |
| 110 | + * |
| 111 | + * 首次登录指的是首次调用 [Bot.login] 进行登录,直到登录成功的过程。 |
| 112 | + * |
| 113 | + * 若在首次登录过程中多次进入[认证流程][BotAuthorization.authorize],则这流程些均被视为首次登录。 |
| 114 | + * |
| 115 | + * @see Bot.login |
| 116 | + * @see BotAuthorization.authorize |
| 117 | + */ |
| 118 | + public val isFirstLogin: Boolean |
| 119 | + |
| 120 | + /** |
| 121 | + * 导致进入[认证流程][BotAuthorization.authorize]的原因。 |
| 122 | + */ |
| 123 | + public val reason: AuthReason |
| 124 | +} |
| 125 | + |
| 126 | +/** |
| 127 | + * 导致进行[认证流程][BotAuthorization.authorize]的原因 |
| 128 | + */ |
| 129 | +public sealed class AuthReason { |
| 130 | + public abstract val bot: Bot |
| 131 | + public abstract val message: String? |
| 132 | + |
| 133 | + /** |
| 134 | + * Bot 全新[登录][Bot.login] |
| 135 | + * |
| 136 | + * 全新登录指登录前本地没有任何当前 Bot 的登录缓存信息而进行的登录。 |
| 137 | + * |
| 138 | + * 全新登录时将会进入[认证流程][BotAuthorization.authorize]。 |
| 139 | + * |
| 140 | + * @see Bot.login |
| 141 | + * @see FastLoginError |
| 142 | + */ |
| 143 | + public class FreshLogin @MiraiInternalApi constructor( |
| 144 | + override val bot: Bot, |
| 145 | + override val message: String? |
| 146 | + ) : AuthReason() |
| 147 | + |
| 148 | + /** |
| 149 | + * Bot 被挤下线 |
| 150 | + * |
| 151 | + * 当 Bot 账号在其他客户端使用相同(或相似)协议登录时,Bot 会下线, |
| 152 | + * 被挤下线后当前的登录会话将失效。 |
| 153 | + * |
| 154 | + * 当 [BotConfiguration.autoReconnectOnForceOffline] 为 `true` 时, |
| 155 | + * Bot 会尝试重新登录,并会以此原因进入[认证流程][BotAuthorization.authorize]。 |
| 156 | + * |
| 157 | + * @see BotConfiguration.autoReconnectOnForceOffline |
| 158 | + * @see BotOfflineEvent.Force |
| 159 | + */ |
| 160 | + public class ForceOffline @MiraiInternalApi constructor( |
| 161 | + override val bot: Bot, |
| 162 | + override val message: String? |
| 163 | + ) : AuthReason() |
| 164 | + |
| 165 | + /** |
| 166 | + * Bot 被服务器断开 |
| 167 | + * |
| 168 | + * 因其他原因导致 Bot 被服务器断开。这些原因包括账号被封禁、被其他客户端手动下线等, |
| 169 | + * 被服务器断开下线后当前的登录会话将失效。 |
| 170 | + * |
| 171 | + * Bot 会尝试重新登录,并会以此原因进入[认证流程][BotAuthorization.authorize]。 |
| 172 | + * |
| 173 | + * @see BotOfflineEvent.MsfOffline |
| 174 | + */ |
| 175 | + public class MsfOffline @MiraiInternalApi constructor( |
| 176 | + override val bot: Bot, |
| 177 | + override val message: String? |
| 178 | + ) : AuthReason() |
| 179 | + |
| 180 | + /** |
| 181 | + * 由网络原因引起的掉线 |
| 182 | + * |
| 183 | + * 一般情况下,Bot 被服务器断开后会尝试重新登录。 |
| 184 | + * |
| 185 | + * 由网络问题引起的掉线不一定会使当前的登录会话失效, |
| 186 | + * 仅登录会话失效时 Bot 会以此原因进入[认证流程][BotAuthorization.authorize]。 |
| 187 | + */ |
| 188 | + public class NetworkError @MiraiInternalApi constructor( |
| 189 | + override val bot: Bot, |
| 190 | + override val message: String? |
| 191 | + ) : AuthReason() |
| 192 | + |
| 193 | + /** |
| 194 | + * 快速登录失败 |
| 195 | + * |
| 196 | + * Bot 账号首次 [登录][Bot.login] 成功后,会保存登录缓存信息用于下次登录。 |
| 197 | + * |
| 198 | + * 下次登录时,Bot 会首先使用登录缓存信息尝试快速登录, |
| 199 | + * 若快速登录失败,则会以此原因进入[认证流程][BotAuthorization.authorize]。 |
| 200 | + * |
| 201 | + * @see BotAuthorization.authorize |
| 202 | + * @see Bot.login |
| 203 | + */ |
| 204 | + public class FastLoginError @MiraiInternalApi constructor( |
| 205 | + override val bot: Bot, |
| 206 | + override val message: String? |
| 207 | + ) : AuthReason() |
| 208 | + |
| 209 | + public class Unknown @MiraiInternalApi constructor( |
| 210 | + override val bot: Bot, |
| 211 | + public val cause: Throwable? |
| 212 | + ) : AuthReason() { |
| 213 | + override val message: String? = cause?.message |
| 214 | + } |
105 | 215 | }
|
106 | 216 |
|
107 | 217 | @NotStableForInheritance
|
|
0 commit comments