mirror of
https://github.com/langbot-app/LangBot.git
synced 2026-06-10 15:56:03 +00:00
* feat: Implement WebSocket long connection client for WeChat Work AI Bot - Added WecomBotWsClient to handle WebSocket connections for receiving messages and sending replies. - Introduced a new migration (dbm022) to add 'enable-webhook' field to existing wecombot adapter configs, ensuring backward compatibility. - Updated WecomBotAdapter to support both WebSocket and webhook modes based on the new configuration. - Enhanced YAML configuration for WecomBot to include 'enable-webhook' and 'Secret' fields, adjusting requirements accordingly. - Incremented database version to 22 to reflect schema changes. * fix:db enable-webhook is false * fix:add logic * fix:Removed an unnecessary configuration check * fix: migration * fix: update migration * fix:migration
50 lines
1.9 KiB
Python
50 lines
1.9 KiB
Python
from .. import migration
|
|
|
|
import sqlalchemy
|
|
import json
|
|
|
|
|
|
@migration.migration_class(24)
|
|
class DBMigrateWecomBotWebSocketMode(migration.DBMigration):
|
|
"""Add enable-webhook field to existing wecombot adapter configs.
|
|
|
|
Existing wecombot bots were all using webhook mode, so we set
|
|
enable-webhook=true to preserve their behavior after the new
|
|
WebSocket long connection mode is introduced as default.
|
|
"""
|
|
|
|
async def upgrade(self):
|
|
"""Upgrade"""
|
|
result = await self.ap.persistence_mgr.execute_async(
|
|
sqlalchemy.text("SELECT uuid, adapter_config FROM bots WHERE adapter = 'wecombot'")
|
|
)
|
|
bots = result.fetchall()
|
|
|
|
for bot_row in bots:
|
|
bot_uuid = bot_row[0]
|
|
adapter_config = json.loads(bot_row[1]) if isinstance(bot_row[1], str) else bot_row[1]
|
|
|
|
if 'enable-webhook' in adapter_config:
|
|
continue
|
|
|
|
# Determine mode based on existing config: if webhook fields are present, keep webhook mode
|
|
has_webhook_config = bool(
|
|
adapter_config.get('Token') and adapter_config.get('EncodingAESKey') and adapter_config.get('Corpid')
|
|
)
|
|
adapter_config['enable-webhook'] = has_webhook_config
|
|
|
|
if self.ap.persistence_mgr.db.name == 'postgresql':
|
|
await self.ap.persistence_mgr.execute_async(
|
|
sqlalchemy.text('UPDATE bots SET adapter_config = :config::jsonb WHERE uuid = :uuid'),
|
|
{'config': json.dumps(adapter_config), 'uuid': bot_uuid},
|
|
)
|
|
else:
|
|
await self.ap.persistence_mgr.execute_async(
|
|
sqlalchemy.text('UPDATE bots SET adapter_config = :config WHERE uuid = :uuid'),
|
|
{'config': json.dumps(adapter_config), 'uuid': bot_uuid},
|
|
)
|
|
|
|
async def downgrade(self):
|
|
"""Downgrade"""
|
|
pass
|