mirror of
https://github.com/LamGC/ScalaBot.git
synced 2025-07-03 05:47:24 +00:00
feat: 将 TelegramBots 升级至 8.0.0, 并适配 TelegramBots 的新改动.
将 TelegramBots 升级至新版本, 以支持新的 API. 由于 TelegramBots 发生无法兼容旧版本的重大变更, 因此 ScalaBot 将随着此次更新一同进行重大更改. BREAKING CHANGE: ScalaBot 所依赖的 TelegramBots 发生重大更改, 所有扩展都需要进行适配. 有关 TelegramBots 的重大变更说明请参考官方文档. ScalaBot 的最低 Java 版本已全部升级至 Java 17 (这是 TelegramBots 的最低兼容性要求), 所有扩展都应该至少迁移至 Java 17 版本. ScalaBot 的重大更改: - scalabot-extension - `net.lamgc.scalabot.extension.util.AbilityBots.getBotAccountId(BaseAbilityBot): long` 已被移除, 由于 BaseAbilityBot 不再允许获取 botToken, 因此该方法被移除. 作为代替, 请通过 `net.lamgc.scalabot.extension.BotExtensionFactory.createExtensionInstance` 所得到的 `BotExtensionCreateOptions` 中获取 botAccountId. 另外, scalabot-extension 中的 `org.jetbrains.kotlinx.binary-compatibility-validator` 似乎不再对 Java 代码起作用, 因此移除该插件, 并在后续寻找替代品. TelegramBots 文档: https://rubenlagus.github.io/TelegramBotsDocumentation/how-to-update-7.html
This commit is contained in:
@ -6,15 +6,17 @@ import kotlinx.coroutines.runBlocking
|
||||
import mu.KotlinLogging
|
||||
import net.lamgc.scalabot.config.*
|
||||
import net.lamgc.scalabot.util.registerShutdownHook
|
||||
import okhttp3.OkHttpClient
|
||||
import org.eclipse.aether.repository.LocalRepository
|
||||
import org.telegram.telegrambots.bots.DefaultBotOptions
|
||||
import org.telegram.telegrambots.meta.TelegramBotsApi
|
||||
import org.telegram.telegrambots.client.okhttp.OkHttpTelegramClient
|
||||
import org.telegram.telegrambots.longpolling.BotSession
|
||||
import org.telegram.telegrambots.longpolling.TelegramBotsLongPollingApplication
|
||||
import org.telegram.telegrambots.meta.api.methods.GetMe
|
||||
import org.telegram.telegrambots.meta.exceptions.TelegramApiRequestException
|
||||
import org.telegram.telegrambots.meta.generics.BotSession
|
||||
import org.telegram.telegrambots.updatesreceivers.DefaultBotSession
|
||||
import java.io.File
|
||||
import java.io.IOException
|
||||
import java.net.InetSocketAddress
|
||||
import java.net.Proxy
|
||||
import java.nio.file.attribute.PosixFilePermission
|
||||
import java.nio.file.attribute.PosixFilePermissions
|
||||
import kotlin.io.path.createDirectories
|
||||
@ -74,7 +76,7 @@ internal class Launcher(
|
||||
private val log = KotlinLogging.logger { }
|
||||
}
|
||||
|
||||
private val botApi = TelegramBotsApi(DefaultBotSession::class.java)
|
||||
private val botApi = TelegramBotsLongPollingApplication()
|
||||
private val botSessionMap = mutableMapOf<ScalaBot, BotSession>()
|
||||
private val mavenLocalRepository = getMavenLocalRepository()
|
||||
|
||||
@ -144,6 +146,10 @@ internal class Launcher(
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
botApi.start()
|
||||
botApi.registerShutdownHook()
|
||||
|
||||
return if (launchedCounts != 0) {
|
||||
log.info { "已启动 $launchedCounts 个机器人." }
|
||||
true
|
||||
@ -171,17 +177,17 @@ internal class Launcher(
|
||||
ProxyConfig(type = ProxyType.NO_PROXY)
|
||||
}
|
||||
|
||||
val botOption = DefaultBotOptions().apply {
|
||||
if (proxyConfig.type != ProxyType.NO_PROXY) {
|
||||
proxyType = proxyConfig.type.toTelegramBotsType()
|
||||
proxyHost = config.proxy.host
|
||||
proxyPort = config.proxy.port
|
||||
log.debug { "机器人 `${botConfig.account.name}` 已启用代理配置: $proxyConfig" }
|
||||
}
|
||||
val okhttpClientBuilder = OkHttpClient.Builder()
|
||||
|
||||
baseUrl = botConfig.baseApiUrl
|
||||
if (proxyConfig.type != ProxyType.NO_PROXY) {
|
||||
val proxyType = proxyConfig.type.toJavaProxyType()
|
||||
val proxyAddress = InetSocketAddress.createUnresolved(proxyConfig.host, proxyConfig.port)
|
||||
okhttpClientBuilder.proxy(Proxy(proxyType, proxyAddress))
|
||||
}
|
||||
|
||||
val account = botConfig.account
|
||||
val telegramClient =
|
||||
OkHttpTelegramClient(okhttpClientBuilder.build(), account.token, botConfig.getBaseApiTelegramUrl())
|
||||
|
||||
val remoteRepositories = config.mavenRepositories
|
||||
.map { it.toRemoteRepository(proxyConfig) }
|
||||
@ -203,15 +209,15 @@ internal class Launcher(
|
||||
|
||||
val bot = ScalaBot(
|
||||
BotDBMaker.getBotDbInstance(account),
|
||||
botOption,
|
||||
telegramClient,
|
||||
extensionPackageFinders,
|
||||
botConfig
|
||||
)
|
||||
|
||||
val botUser = bot.execute(GetMe())
|
||||
val botUser = bot.telegramClient.execute(GetMe())
|
||||
log.debug { "已验证 Bot Token 有效性, Bot Username: ${botUser.userName}" }
|
||||
|
||||
botSessionMap[bot] = botApi.registerBot(bot)
|
||||
botSessionMap[bot] = botApi.registerBot(botConfig.account.token, bot)
|
||||
log.info { "机器人 `${bot.botUsername}` 已启动." }
|
||||
|
||||
if (botConfig.autoUpdateCommandList) {
|
||||
|
Reference in New Issue
Block a user