mirror of
https://github.com/LamGC/ScalaBot.git
synced 2025-07-04 14:27:25 +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:
@ -10,13 +10,29 @@ import net.lamgc.scalabot.config.ProxyConfig;
|
||||
@SuppressWarnings("unused")
|
||||
public class BotExtensionCreateOptions {
|
||||
|
||||
private final long botAccountId;
|
||||
private final ProxyConfig proxy;
|
||||
|
||||
public BotExtensionCreateOptions(ProxyConfig proxy) {
|
||||
public BotExtensionCreateOptions(long botAccountId, ProxyConfig proxy) {
|
||||
this.botAccountId = botAccountId;
|
||||
this.proxy = proxy;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取 Bot 使用的代理信息.
|
||||
*
|
||||
* @return 返回 Bot 中 TelegramClient 所使用的代理配置.
|
||||
*/
|
||||
public ProxyConfig getProxy() {
|
||||
return proxy;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取 Bot 的账户 Id.
|
||||
*
|
||||
* @return 返回 Bot 的账户 Id.
|
||||
*/
|
||||
public long getBotAccountId() {
|
||||
return botAccountId;
|
||||
}
|
||||
}
|
||||
|
@ -1,7 +1,8 @@
|
||||
package net.lamgc.scalabot.extension;
|
||||
|
||||
import org.telegram.abilitybots.api.bot.BaseAbilityBot;
|
||||
import org.telegram.abilitybots.api.util.AbilityExtension;
|
||||
import org.telegram.telegrambots.abilitybots.api.bot.BaseAbilityBot;
|
||||
import org.telegram.telegrambots.abilitybots.api.db.DBContext;
|
||||
import org.telegram.telegrambots.abilitybots.api.util.AbilityExtension;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
@ -9,7 +10,7 @@ import java.io.File;
|
||||
* 该接口用于为指定的 {@link BaseAbilityBot} 创建扩展.
|
||||
*
|
||||
* <p> 由于 AbilityExtension 无法直接获取 {@link BaseAbilityBot} 的
|
||||
* 数据库对象 {@link org.telegram.abilitybots.api.db.DBContext},
|
||||
* 数据库对象 {@link DBContext},
|
||||
* 所以将通过该接口工厂来创建扩展对象.
|
||||
*
|
||||
* @author LamGC
|
||||
@ -20,30 +21,7 @@ public interface BotExtensionFactory {
|
||||
/**
|
||||
* 为给定的 {@link BaseAbilityBot} 对象创建扩展.
|
||||
*
|
||||
* <p> 如扩展无使用 {@link org.telegram.abilitybots.api.db.DBContext} 的话,
|
||||
* 也可以返回扩展单例, 因为 AbilityBot 本身并不禁止多个机器人共用一个扩展对象
|
||||
* (AbilityBot 只是调用了扩展中的方法来创建 Ability 对象).
|
||||
*
|
||||
* @param bot 机器人对象.
|
||||
* @param shareDataFolder ScalaBot App 为扩展提供的共享数据目录.
|
||||
* <p>路径格式为:
|
||||
* <pre> $DATA_ROOT/data/extensions/{GroupId}/{ArtifactId}</pre>
|
||||
* <b>同一个扩展包的 Factory</b> 接收到的共享数据目录<b>都是一样的</b>,
|
||||
* 建议将数据存储在数据目录中, 便于数据的存储管理.
|
||||
* @return 返回为该 Bot 对象创建的扩展对象, 如果不希望为该机器人提供扩展, 可返回 {@code null}.
|
||||
* @deprecated 请使用 {@link #createExtensionInstance(BaseAbilityBot, File, BotExtensionCreateOptions)},
|
||||
* 该方法最迟在 1.0.0 正式版中移除.
|
||||
* @since 0.0.1
|
||||
*/
|
||||
@Deprecated(since = "0.7.0", forRemoval = true)
|
||||
default AbilityExtension createExtensionInstance(BaseAbilityBot bot, File shareDataFolder) {
|
||||
throw new UnsupportedOperationException("The method has not been implemented.");
|
||||
}
|
||||
|
||||
/**
|
||||
* 为给定的 {@link BaseAbilityBot} 对象创建扩展.
|
||||
*
|
||||
* <p> 如扩展无使用 {@link org.telegram.abilitybots.api.db.DBContext} 的话,
|
||||
* <p> 如扩展无使用 {@link DBContext} 的话,
|
||||
* 也可以返回扩展单例, 因为 AbilityBot 本身并不禁止多个机器人共用一个扩展对象
|
||||
* (AbilityBot 只是调用了扩展中的方法来创建 Ability 对象).
|
||||
*
|
||||
@ -57,8 +35,6 @@ public interface BotExtensionFactory {
|
||||
* @return 返回为该 Bot 对象创建的扩展对象, 如果不希望为该机器人提供扩展, 可返回 {@code null}.
|
||||
* @since 0.7.0
|
||||
*/
|
||||
default AbilityExtension createExtensionInstance(BaseAbilityBot bot, File shareDataFolder, BotExtensionCreateOptions options) {
|
||||
return createExtensionInstance(bot, shareDataFolder);
|
||||
}
|
||||
AbilityExtension createExtensionInstance(BaseAbilityBot bot, File shareDataFolder, BotExtensionCreateOptions options);
|
||||
|
||||
}
|
||||
|
@ -1,40 +1,14 @@
|
||||
package net.lamgc.scalabot.extension.util;
|
||||
|
||||
import org.telegram.abilitybots.api.bot.BaseAbilityBot;
|
||||
import org.telegram.telegrambots.abilitybots.api.bot.BaseAbilityBot;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
public class AbilityBots {
|
||||
|
||||
private final static Pattern botTokenPattern = Pattern.compile("([1-9]\\d+):([A-Za-z\\d_-]{35,})");
|
||||
public final class AbilityBots {
|
||||
|
||||
private AbilityBots() {
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取 AbilityBot 的账户 Id.
|
||||
*
|
||||
* <p> 账户 Id 来自于 botToken 中, token 的格式为 "[AccountId]:[Secret]".
|
||||
* <p> 账户 Id 的真实性与 botToken 的有效性有关, 本方法并不会确保 botToken 的有效性, 一般情况下也无需考虑 Id 的有效性,
|
||||
* 如果有需要, 可尝试通过调用 {@link org.telegram.telegrambots.meta.api.methods.GetMe} 来确保 botToken 的有效性.
|
||||
*
|
||||
* @param bot 要获取账户 Id 的 AbilityBot 对象.
|
||||
* @return 返回 AbilityBot 的账户 Id.
|
||||
* @throws IllegalArgumentException 当 AbilityBot 的 botToken 格式错误时抛出该异常.
|
||||
*/
|
||||
@SuppressWarnings("deprecation")
|
||||
public static long getBotAccountId(BaseAbilityBot bot) {
|
||||
// 根据文档说明, 弃用仅针对重写方法, 使用该方法并无大碍.
|
||||
String botToken = bot.getBotToken();
|
||||
Matcher matcher = botTokenPattern.matcher(botToken);
|
||||
if (!matcher.matches()) {
|
||||
throw new IllegalArgumentException("Invalid token format.");
|
||||
}
|
||||
return Long.parseLong(matcher.group(1));
|
||||
}
|
||||
|
||||
/**
|
||||
* 取消某一对话的状态机.
|
||||
*
|
||||
@ -43,7 +17,7 @@ public class AbilityBots {
|
||||
* @return 如果状态机存在, 则删除后返回 true, 不存在(未开启任何状态机, 即没有触发任何 Reply)则返回 false.
|
||||
*/
|
||||
public static boolean cancelReplyState(BaseAbilityBot bot, long chatId) {
|
||||
Map<Long, Integer> stateMap = bot.db().getMap("user_state_replies");
|
||||
Map<Long, Integer> stateMap = bot.getDb().getMap("user_state_replies");
|
||||
if (!stateMap.containsKey(chatId)) {
|
||||
return false;
|
||||
}
|
||||
|
Reference in New Issue
Block a user