Trainingcqy
6d055e81e9
fix: GIF sent as static image in Telegram adapter ( #6329 )
...
* fix(telegram): route GIF files to send_animation instead of send_photo
* fix: narrow exception in _is_gif to OSError
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
* refactor: simplify image send dispatch in send_with_client
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
* refactor: simplify image dispatch in _process_chain_items
* ruff format
---------
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Soulter <905617992@qq.com >
2026-03-15 21:33:30 +08:00
Sakari
f8d075b5d3
fix(telegram): avoid treating normal replies as topic threads ( #6174 )
2026-03-14 18:27:13 +08:00
DOHEX
3e2cb6a2ab
fix(telegram): remove deprecated normalize_whitespace param from ( #6044 )
...
telegramify_markdown.markdownify calls
2026-03-12 00:34:07 +08:00
whatevertogo
3fd6c4c8a6
fix: 修复 asyncio 事件循环相关问题 ( #5774 )
...
* fix: 修复 asyncio 事件循环相关的问题
1. components.py: 修复异常处理结构错误
- 将 except Exception 移到正确的内部 try 块
- 确保 _download_file() 异常能被正确捕获和记录
2. session_lock.py: 修复跨事件循环 Lock 绑定问题
- 添加 _access_lock_loop_id 追踪事件循环
- 当事件循环变化时重新创建 Lock
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
* fix: 根据代码审查反馈修复问题
1. components.py: 移除 asyncio.set_event_loop() 调用
- 创建临时 event loop 时不再设置为全局
- 避免干扰其他 asyncio 使用
2. session_lock.py: 简化延迟初始化逻辑
- 移除 loop-ID 追踪和 _get_lock 方法
- 使用 setdefault 简化 session lock 创建
- 保留延迟初始化行为
3. wecomai_queue_mgr.py: 使用 time.monotonic() 替代 loop.time()
- 同步方法不再依赖活动的 event loop
- 避免在非异步上下文中抛出 RuntimeError
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
* fix: 优化 asyncio 事件循环管理,使用安全的方式创建和关闭事件循环
* fix: 根据代码审查反馈改进异常处理和事件循环使用
- main.py: 显式处理 check_dashboard_files() 返回 None 的情况
- components.py: 使用 logger.exception 保留异常堆栈信息
- star_manager.py: 添加 Future 异常回调处理 __del__ 执行异常
- bay_manager.py: 缓存事件循环引用避免重复调用
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
* refactor: 简化 SessionLockManager 使用 defaultdict 和 setdefault
- 使用 defaultdict(asyncio.Lock) 简化锁的懒创建
- 使用 setdefault 简化 _get_loop_state 逻辑
- 减少 get + if 分支,提升可读性
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
* fix: 降低 webui_dir 检查失败时的日志级别为 warning
改为警告而非退出,允许程序在无 WebUI 的情况下继续运行
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
* refactor: 重构事件循环锁管理,简化锁状态管理逻辑
* 新增对 SessionLockManager 的多事件循环隔离测试
* fix: 修复测试中的变量声明和断言,确保事件循环管理器的正确性
* fix: 修复插件删除时异常处理逻辑,确保正确记录错误信息
* fix: 新增针对多个事件循环的 OneBot 实例的测试,确保锁对象在不同事件循环间不共享
---------
Co-authored-by: whatevertogo <whatevertogo@users.noreply.github.com >
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-09 01:00:13 +09:00
camera-2018
7cf77adbc8
feat(telegram): supports sendMessageDraft API ( #5726 )
...
* feat(telegram): 使用 sendMessageDraft API 实现私聊流式输出
- 新增 _send_message_draft 方法封装 Telegram Bot API sendMessageDraft
- 私聊流式输出使用 sendMessageDraft 推送草稿动画,群聊保留 edit_message_text 回退
- 使用独立异步发送循环 (_draft_sender_loop) 按固定间隔推送最新缓冲区内容,
完全解耦 token 到达速度与 API 网络延迟
- 流式结束后发送真实消息保留最终内容(draft 是临时的)
- 使用模块级递增 draft_id 替代随机生成,确保 Telegram 端动画连续性
* fix(telegram): convert draft text to Markdown before sending message draft
* chore(telegram): telegram 适配器重构
- 提取公共方法
- 有新 token 到达时触发流式
- 生成结束后清除draft内容
- 默认draft发送md格式
* style(telegram): ruff format
* style(telegram): ruff check
---------
Co-authored-by: Soulter <905617992@qq.com >
2026-03-05 11:20:28 +08:00
CCCCCCTV
3eb15089af
fix(telegram): avoid duplicate message_thread_id in streaming ( #5430 )
2026-02-25 19:53:17 +08:00
Dt8333
c5b23d12a8
fix: 修复Pyright静态类型检查报错 ( #5437 )
...
* refactor: 修正 Sqlite 查询、下载回调、接口重构与类型调整
* feat: 为 OneBotClient 增加 CallAction 协议与异步调用支持
2026-02-25 19:49:16 +08:00
Soulter
c24de24ca4
chore: ruff format
2026-02-24 23:12:18 +08:00
Yunhao Cao
b54b4c79ed
fix: Telegram voice message format (OGG instead of WAV) causing issues with OpenAI STT API ( #5389 )
2026-02-24 23:11:56 +08:00
evpeople
478cc32de1
Feat/telegram command alias register #5233 ( #5234 )
...
* feat: support registering command aliases for Telegram
Now when registering commands with aliases, all aliases will be
registered as Telegram bot commands in addition to the main command.
Example:
@register_command(command_name="draw", alias={"画", "gen"})
Now /draw, /画, and /gen will all appear in the Telegram command menu.
* feat(telegram): add duplicate command name warning when registering commands
Log a warning when duplicate command names are detected during Telegram
command registration to help identify configuration conflicts.
2026-02-21 23:30:46 +08:00
Chiu Chun-Hsien
a2b61e2ab8
refactor: extract Voice_messages_forbidden fallback into shared helper with typed BadRequest exception ( #5204 )
...
- Add _send_voice_with_fallback helper to deduplicate voice forbidden handling
- Catch telegram.error.BadRequest instead of bare Exception with string matching
- Add text field to Record component to preserve TTS source text
- Store original text in Record during TTS conversion for use as document caption
- Skip _send_chat_action when chat_id is empty to avoid unnecessary warnings
2026-02-18 21:45:19 +08:00
evpeople
30a0098b2a
feat: add send_chat_action for Telegram platform adapter ( #5037 )
...
* feat: add send_chat_action for Telegram platform adapter
Add typing/upload indicator when sending messages via Telegram.
- Added _send_chat_action helper method for sending chat actions
- Send appropriate action (typing, upload_photo, upload_document, upload_voice)
before sending different message types
- Support streaming mode with typing indicator
- Support supergroup with message_thread_id
* refactor(telegram): extract chat action helpers and add throttling
- Add ACTION_BY_TYPE mapping for message type to action priority
- Add _get_chat_action_for_chain() to determine action from message chain
- Add _send_media_with_action() for upload → send → restore typing pattern
- Add _ensure_typing() helper for typing status
- Add chat action throttling (0.5s) in streaming mode to avoid rate limits
- Update type annotation to ChatAction | str for better static checking
* feat(telegram): implement send_typing method for Telegram platform
---------
Co-authored-by: Soulter <905617992@qq.com >
2026-02-12 14:46:06 +08:00
Dt8333
7dd95d8a59
chore: auto ann fix by ruff ( #4903 )
...
* chore: auto fix by ruff
* refactor: 统一修正返回类型注解为 None/bool 以匹配实现
* refactor: 将 _get_next_page 改为异步并移除多余的请求错误抛出
* refactor: 将 get_client 的返回类型改为 object
* style: 为 LarkMessageEvent 的相关方法添加返回类型注解 None
---------
Co-authored-by: Soulter <37870767+Soulter@users.noreply.github.com >
2026-02-09 00:22:24 +08:00
DD斩首
dbe8e33c4b
feat(telegram): 添加媒体组(相册)支持 / add media group (album) support ( #4893 )
...
* feat(telegram): 添加媒体组(相册)支持 / add media group (album) support
## 功能说明
支持 Telegram 的媒体组消息(相册),将多张图片/视频合并为一条消息处理,而不是分散成多条消息。
## 主要改动
### 1. 初始化媒体组缓存 (__init__)
- 添加 `media_group_cache` 字典存储待处理的媒体组消息
- 使用 2.5 秒超时收集媒体组消息(基于社区最佳实践)
- 最大等待时间 10 秒(防止永久等待)
### 2. 消息处理流程 (message_handler)
- 检测 `media_group_id` 判断是否为媒体组消息
- 媒体组消息走特殊处理流程,避免分散处理
### 3. 媒体组消息缓存 (handle_media_group_message)
- 缓存收到的媒体组消息
- 使用 APScheduler 实现防抖(debounce)机制
- 每收到新消息时重置超时计时器
- 超时后触发统一处理
### 4. 媒体组合并处理 (process_media_group)
- 从缓存中取出所有媒体项
- 使用第一条消息作为基础(保留文本、回复等信息)
- 依次添加所有图片、视频、文档到消息链
- 将合并后的消息发送到处理流程
## 技术方案论证
Telegram Bot API 在处理媒体组时的设计限制:
1. 将媒体组的每个消息作为独立的 update 发送
2. 每个 update 带有相同的 `media_group_id`
3. **不提供**组的总数、结束标志或一次性完整组的机制
因此,bot 必须自行收集消息,并通过硬编码超时(timeout/delay)等待可能延迟到达的消息。
这是目前唯一可靠的方案,被官方实现、主流框架和开发者社区广泛采用。
### 官方和社区证据:
- **Telegram Bot API 服务器实现(tdlib)**:明确指出缺少结束标志或总数信息
https://github.com/tdlib/telegram-bot-api/issues/643
- **Telegram Bot API 服务器 issue**:讨论媒体组处理的不便性,推荐使用超时机制
https://github.com/tdlib/telegram-bot-api/issues/339
- **Telegraf(Node.js 框架)**:专用媒体组中间件使用 timeout 控制等待时间
https://github.com/DieTime/telegraf-media-group
- **StackOverflow 讨论**:无法一次性获取媒体组所有文件,必须手动收集
https://stackoverflow.com/questions/50180048/telegram-api-get-all-uploaded-photos-by-media-group-id
- **python-telegram-bot 社区**:确认媒体组消息单独到达,需手动处理
https://github.com/python-telegram-bot/python-telegram-bot/discussions/3143
- **Telegram Bot API 官方文档**:仅定义 `media_group_id` 为可选字段,不提供获取完整组的接口
https://core.telegram.org/bots/api#message
## 实现细节
- 使用 2.5 秒超时收集媒体组消息(基于社区最佳实践)
- 最大等待时间 10 秒(防止永久等待)
- 采用防抖(debounce)机制:每收到新消息重置计时器
- 利用 APScheduler 实现延迟处理和任务调度
## 测试验证
- ✅ 发送 5 张图片相册,成功合并为一条消息
- ✅ 保留原始文本说明和回复信息
- ✅ 支持图片、视频、文档混合的媒体组
- ✅ 日志显示 Processing media group <media_group_id> with 5 items
## 代码变更
- 文件:astrbot/core/platform/sources/telegram/tg_adapter.py
- 新增代码:124 行
- 新增方法:handle_media_group_message(), process_media_group()
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com >
* refactor(telegram): 优化媒体组处理性能和可靠性
根据代码审查反馈改进:
1. 实现 media_group_max_wait 防止无限延迟
- 跟踪媒体组创建时间,超过最大等待时间立即处理
- 最坏情况下 10 秒内必定处理,防止消息持续到达导致无限延迟
2. 移除手动 job 查找优化性能
- 删除 O(N) 的 get_jobs() 循环扫描
- 依赖 replace_existing=True 自动替换任务
3. 重用 convert_message 减少代码重复
- 统一所有媒体类型转换逻辑
- 未来添加新媒体类型只需修改一处
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com >
* fix(telegram): handle missing message in media group processing and improve logging messages
---------
Co-authored-by: Ubuntu <ubuntu@localhost.localdomain >
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com >
Co-authored-by: Soulter <905617992@qq.com >
2026-02-08 13:22:45 +08:00
時壹
9782d1bff8
fix:exclude disabled commands from platform command registration ( #4485 )
2026-01-15 14:04:15 +08:00
Soulter
8a0f865af1
feat: enhance tool call handling and agent stats tracking and UI integration for tool calls render ( #4101 )
...
* feat: enhance tool call handling and UI integration for tool calls render
- Added support for tool call messages in the agent runner and webchat event handling.
- Implemented JSON message component for structured tool call data.
- Updated chat route to save tool call information in message history.
- Enhanced frontend to display tool call details in a collapsible format, including status and results.
- Introduced elapsed time tracking for ongoing tool calls in the chat interface.
* fix: improve message handling in agent run utility and tool loop runner
- Refactored message sending logic in `astr_agent_run_util.py` to use `msg_chain` directly for better clarity.
- Added a check in `tool_loop_agent_runner.py` to ensure `tool_call_result_blocks` is not empty before yielding the last tool call result, preventing potential errors.
* refactor: enhance message structure and UI for chat components
- Updated message handling in `MessageList.vue` to support structured message parts, including plain text, images, audio, and files.
- Improved the `Chat.vue` component styles for better visual consistency.
- Refactored message parsing logic in `useMessages.ts` to accommodate new message formats and ensure proper rendering of embedded content.
- Removed deprecated tool call handling from the message structure, streamlining the message display process.
* chore: ruff format
* feat: implement agent statistics tracking and display in chat
- Added `AgentStats` and `TokenUsage` data classes to track agent performance metrics.
- Enhanced `ToolLoopAgentRunner` to collect and update agent statistics during execution.
- Integrated agent statistics sending to webchat for real-time updates.
- Updated chat route to save and display agent statistics in message history.
- Improved frontend components to visualize agent statistics, including token usage and duration metrics.
* fix: improve message handling in Telegram event and agent run utility
- Updated message sending logic in `astr_agent_run_util.py` to send the correct message chain for tool calls.
- Enhanced `tg_event.py` to edit messages during streaming breaks, improving message management and user experience.
- Added error handling for message editing failures to ensure robustness.
* chore: ruff format
2025-12-18 17:11:09 +08:00
Soulter
8a0b7717cc
feat: supports webhook mode for Lark platform ( #4016 )
...
* feat: add Lark platform support with unified webhook configuration
* fix: update token verification logic in LarkWebhookServer
* feat: implement event deduplication and cleanup for Lark webhook events
2025-12-12 22:12:13 +08:00
Dt8333
f624971613
chore: fix bunches of type checking errors ( #3213 )
...
* chore(core.utils): 🚨 修正错误Lint
* chore(core.provider): 🚨 修复基类错误Lint
* chore(core.utils): 补全session_get()的重载
* chore(core.provider): 🚨 修正实现错误Lint
* chore(core.platform): 🚨 修正platform基类和webchat的错误Lint
* chore(core.platform): 修正错误实现Lint
* fix(core.provider): 修复循环调用和错误assert
* chore(core.platform): 修复部分实现Lint
* chore(core.provider): 补充Dify.text_chat_stream的参数类型
* chore(core.pipeline): 🚨 修复错误Lint
* fix(core.slack): 补充遗漏导入
* chore(core.utils): 修复错误的session_get声明
* chore(core.platform): 移除Lark adapter import中的wildcard
* chore(core.db): 修复声明和部分逻辑
* chore(core.db): 添加typings,使faiss参数能被正确识别。
* chore(core): 修复声明
* chore(core): 修改声明
* chore: 补充faiss声明
* chore(dashboard): 修改实现,减少报错
* chore(package): 修改部分声明与实现,减少报错
* chore(core): 添加Handler的overload,以去除部分assert同时通过类型检查
* chore(core.pipeline): 修改Pipeline Scheduler的execute,将判断属性改为判断类型,通过静态类型检查
* chore(core.config): 添加类型标注,通过类型检查
* chore(core.message): 为File._download_file添加检查,通过类型检查
* fix: 将断言改为条件判断以实现优雅关闭的容错性
* refactor: 移除 discord 客户端中的 assert,改用 if None 判断并抛出异常
Co-authored-by: aider (openai/gemini-3-pro-high) <aider@aider.chat >
* fix: DiscordPlatformAdapter 对 self.client.user 为 None 做日志并返回,移除断言
Co-authored-by: aider (openai/gemini-3-pro-high) <aider@aider.chat >
* fix: 增强 Lark 相关空值/异常检查并完善日志输出
Co-authored-by: aider (openai/gemini-3-pro-high) <aider@aider.chat >
* refactor: 将断言替换为条件检查并加入日志与错误处理
Co-authored-by: aider (openai/gemini-3-pro-high) <aider@aider.chat >
* chore: 移除LLM生成的无用注释
* refactor: 使用 File.get_file 替换下载逻辑并移除 assert,提供默认 filename
Co-authored-by: aider (openai/gemini-3-pro-high) <aider@aider.chat >
* fix: Slack Socket 未初始化抛出运行时异常,图片 URL 判空改为非空判断
* refactor: 将 WeChatPadProAdapter 的断言改为空值判断并添加日志
* refactor: 使用 isinstance 替代断言实现类型判断,便于静态检查
Co-authored-by: aider (openai/gemini-3-pro-high) <aider@aider.chat >
* fix: 去除cast,直接使用字段与字典访问,修正端口解析
Co-authored-by: aider (openai/gemini-3-pro-high) <aider@aider.chat >
* refactor: 使用 match-case 重构 ProviderManager 加载并通过类型检查抛出 TypeError
Co-authored-by: aider (openai/gemini-3-pro-high) <aider@aider.chat >
* fix: group_name_display 时若 group 对象为空则记录错误并返回
* fix: 将 _get_current_persona_id 的 assert 替换成 if guard 并返回 None
Co-authored-by: aider (openai/gemini-3-pro-high) <aider@aider.chat >
* fix: 优化插件目录存在性检查及图片URL非空验证,更新JSON排序配置
* fix: 将 datetime_str 的 assert 替换为显式检查并抛出异常
Co-authored-by: aider (openai/gemini-3-pro-high) <aider@aider.chat >
* refactor: 移除 cast,改为运行时检查并在找不到调度器时跳过
Co-authored-by: aider (openai/gemini-3-pro-high) <aider@aider.chat >
* refactor: 移除 cast,改用 isinstance 检查 FaissVecDB 并警告
Co-authored-by: aider (openai/gemini-3-pro-high) <aider@aider.chat >
* fix: 删除 typing.cast 导入,并在获取文件绝对路径前校验 file_
* refactor: 移除 typing.cast,简化内容安全检查调用
Co-authored-by: aider (openai/gemini-3-pro-high) <aider@aider.chat >
* refactor: 将 PlatformMetadata.id 设为必填并在注册时传入 id,移除 cast
* refactor: 移除 cast,改用 HasInitialize 与 isinstance 进行初始化
Co-authored-by: aider (openai/gemini-3-pro-high) <aider@aider.chat >
* fix: 为 ProviderManager.initialize 增加ID类型判断,避免 None 导致 get 失败
Co-authored-by: aider (openai/gemini-3-pro-high) <aider@aider.chat >
* refactor: 为 OTTSProvider 与 AzureNativeProvider 引入 _client 与 client 属性改进上下文管理
Co-authored-by: aider (openai/gemini-3-pro-high) <aider@aider.chat >
* fix: 为 Whisper 自托管源添加模型未初始化校验并直接调用 transcribe
Co-authored-by: aider (openai/gemini-3-pro-high) <aider@aider.chat >
* refactor: 移除未使用的 cast 导入并简化 platform_name 赋值
* refactor: 引入 cast 并对 id 使用 cast(str, ...) 提升类型安全
* fix: 将 _id_to_sid 返回改为 str,空值返回空串;对 id 与 message_id 使用 cast
Co-authored-by: aider (openai/gemini-3-pro-high) <aider@aider.chat >
* refactor: 重构 Discord 处理逻辑:强制 类型转换、优先斜杠指令并优化提及判断
Co-authored-by: aider (openai/gemini-3-pro-high) <aider@aider.chat >
* fix: 统一对 id 获取执行 cast,并在微信消息解析失败时抛错
* Revert "fix: 去除cast,直接使用字段与字典访问,修正端口解析"
This reverts commit 1cbfdf9d1b .
* fix: 百炼 Rerank 会话关闭时返回空结果;初始化 request.prompt 避免空值拼接
* fix: 统一处理搜索结果链接为字符串,新增 _get_url 助手并适配 Bing/Sogo
Co-authored-by: aider (openai/gemini-3-pro-high) <aider@aider.chat >
* refactor: 调整 call_handler 泛型、Discord 通道注解及 FishAudioTTS API 请求类型
* refactor: 使用 col(...) 替代列引用并对结果进行 CursorResult 强转
* chore: ruff format
---------
Co-authored-by: aider (openai/gemini-3-pro-high) <aider@aider.chat >
Co-authored-by: Soulter <905617992@qq.com >
2025-12-09 14:13:47 +08:00
Soulter
5714944eef
feat: unified platform webhook url ( #3889 )
...
* feat: unified platform webhook url
* chore: ruff format
* fix: 修复 Telegram 语音使用 Whisper API 报错 (#3884 )
* Update whisper_api_source.py
* chore: ruff format
---------
Co-authored-by: Soulter <905617992@qq.com >
* Update astrbot/dashboard/routes/platform.py
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com >
* Update astrbot/core/platform/sources/qqofficial_webhook/qo_webhook_adapter.py
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com >
* chore: ruff format
* fix: update webhook dialog descriptions for clarity in English and Chinese locales
* fix: update webhook URL paths to include '/api' prefix for consistency across the application
---------
Co-authored-by: 易推倒白毛 <zhaixingbi@gmail.com >
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com >
2025-12-03 15:44:52 +08:00
Soulter
2ba0460f19
feat: introduce file extract capability ( #3870 )
...
* feat: introduce file extract capability
powered by MoonshotAI
* fix: correct indentation in default configuration file
* fix: add error handling for file extract application in InternalAgentSubStage
* fix: update file name handling in InternalAgentSubStage to correctly associate file names with extracted content
* feat: add condition settings for local agent runner in default configuration
* fix: enhance file naming logic in File component and update prompt handling in InternalAgentSubStage
2025-12-01 18:12:39 +08:00
LIghtJUNction
0b7fc29ac4
style: add ruff lint module of isort and pyupgrade, and some ruff check fix ( #3214 )
...
Co-authored-by: Dt8333 <25431943+Dt8333@users.noreply.github.com >
Co-authored-by: Soulter <905617992@qq.com >
2025-11-01 13:26:19 +08:00
u0_ani-nya.com
5eaf03e227
perf: 对于 Telegram 群聊,将回复机器人的消息视为唤醒机器人 ( #2926 )
...
* reply as at for tg
Add handling for bot replies in group messages.
* style: type checking and ruff format
---------
Co-authored-by: Soulter <905617992@qq.com >
2025-10-01 19:04:37 +08:00
Seayon
a8437d9331
feat: 支持在 Telegram 和飞书下请求 LLM 前预表态功能 ( #2737 )
...
* ✨ feat(platform): 为 Telegram 和飞书添加消息表情回应功能
支持在收到命令时自动添加表情回应,提升用户交互体验
新增平台特异配置项,允许自定义启用状态和表情列表
* Update astrbot/core/platform/astr_message_event.py
Co-authored-by: sourcery-ai[bot] <58596630+sourcery-ai[bot]@users.noreply.github.com>
* style: ruff format
* fix: 优化平台特异配置的预回应表情处理逻辑
---------
Co-authored-by: sourcery-ai[bot] <58596630+sourcery-ai[bot]@users.noreply.github.com>
Co-authored-by: Soulter <905617992@qq.com >
2025-09-30 17:29:34 +08:00
Soulter
3a044bb71a
fix: 修复 Telegram 下流式传输时,第一次输出的内容会被覆盖掉的问题 ( #2838 )
...
fixes : #2481
2025-09-21 21:24:47 +08:00
Soulter
7740e1e131
ci: add ci stage of code format checking ( #2750 )
...
* style: ruff format
* ci(dashboard-ci): ensure GitHub Release action only runs on push events
* ci(code-format): ruff format and ruff check
2025-09-14 18:05:58 +08:00
Soulter
2c3c3ae546
fix: 移除无用的调试日志以简化命令注册逻辑
2025-09-07 11:37:34 +08:00
Soulter
714d4af63d
Merge pull request #1963 from AstrBotDevs/refactor-llm-request
...
Refactor: 将 LLM Request 部分抽象为 AgentRunner 并优化多轮工具调用
2025-06-29 21:38:43 +08:00
Soulter
2f941de65b
feat: 支持展示工具使用过程
2025-06-29 21:19:40 +08:00
Soulter
80fca470f2
fix: cannot make active reply in telegram
...
Co-authored-by: youtiaoguagua <cloudcranesss@210625568+cloudcranesss@users.noreply.github.com >
2025-06-27 00:04:25 +08:00
Soulter
52a4c986a8
fix: update star_handlers_registry iteration in TelegramPlatformAdapter
2025-05-28 00:31:04 +08:00
Soulter
c501728204
fix: plugin priority
...
fixes : #1662
2025-05-28 00:23:02 +08:00
Soulter
a1cd5c53a9
chore: add comments
2025-05-27 23:38:35 +08:00
Raven95676
3deb6d3ab3
fix: clean code
2025-05-27 20:52:40 +08:00
Raven95676
af34cdd5d2
fix(telegram): 支持长消息分段发送并优化消息编辑逻辑
2025-05-27 20:15:16 +08:00
Raven95676
3ad2c46f3f
perf: tg适配器同步aiocqhttp处理逻辑
2025-05-12 15:04:23 +08:00
Raven95676
c111da4681
refactor: 修改框架路径获取方式,规范化路径拼接
2025-05-06 17:30:34 +08:00
anka
321b04772c
refactor: 🍩 将本地路径和url分离, 需要本地文件时提供下载接口, 同时向前兼容
2025-05-01 01:16:30 +08:00
Raven95676
6ee9010645
feat: 允许用户自定义telegram适配器指令注册行为,优化命令注册机制
2025-04-23 15:53:18 +08:00
Soulter
da546cfe7f
🎈 perf(telegram): 弱化无法注册指令的日志级别
2025-04-20 18:08:52 +08:00
渡鸦95676
4c546f2f53
Merge branch 'master' into better-stream
2025-04-15 21:22:08 +08:00
Raven95676
3753fce912
perf: 为发送流式消息的Fallback可选
2025-04-15 21:21:02 +08:00
Raven95676
264771fe98
fix: 移除注册时的调试信息,注册命令时添加合法性校验
2025-04-14 21:55:34 +08:00
Soulter
37f93d1760
Merge pull request #1175 from Raven95676/telegram
...
feat: 自动注册指令到Telegram
2025-04-10 20:26:54 +08:00
Raven95676
a1481fb179
群聊场景命令特殊处理
2025-04-10 14:54:25 +08:00
zhx
b62b1f3870
feat: 添加插件能针对不同消息平台开启关闭的功能
...
Squashed:
chore: merge master branch
chore: merge from master branch
chore: rename updateAllPlatformCompatibility to update_all_platform_compatibility for consistency
Reviewed by:
@Raven95676 @Soulter
2025-04-09 17:27:44 +08:00
Raven95676
db257af58e
提升代码可读性
2025-04-07 22:29:50 +08:00
Raven95676
735368c71b
保证变量名可读性
2025-04-07 22:16:02 +08:00
Raven95676
9e04e3679b
保证内置插件指令被注册
2025-04-07 22:08:29 +08:00
Raven95676
43b8414727
初步实现指令注册
2025-04-07 21:51:41 +08:00
Raven95676
41bd76e091
tg适配器最后一次编辑转换markdown
2025-04-07 00:47:52 +08:00