You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

部署Telegram Youtube上传Bot遇Unknown storage engine错误求助

部署Puskara-Upload-Only Telegram Bot时遇到"Unknown storage engine"错误排查

本地部署基于Pyrogram和Google Client API开发的Puskara-Upload-Only Bot(用于通过Youtube Data API v3远程上传视频到Youtube)时,运行触发如下错误:

PS E:\lotus2> py -m bot
Traceback (most recent call last):
  File "C:\Users\ankit\AppData\Local\Programs\Python\Python310\lib\runpy.py", line 196, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "C:\Users\ankit\AppData\Local\Programs\Python\Python310\lib\runpy.py", line 86, in _run_code
    exec(code, run_globals)
  File "E:\lotus2\bot\__main__.py", line 13, in <module>
    UtubeBot().run()
  File "E:\lotus2\bot\utubebot.py", line 8, in __init__
    super().__init__(
  File "C:\Users\ankit\AppData\Local\Programs\Python\Python310\lib\site-packages\pyrogram\client.py", line 242, in __init__
    else:            raise ValueError("Unknown storage engine")
ValueError: Unknown storage engine

相关代码文件

1. main.py

import logging

from .utubebot import UtubeBot
from .config import Config


if __name__ == "__main__":
    logging.basicConfig(level=logging.DEBUG if Config.DEBUG else logging.INFO)
    logging.getLogger("pyrogram").setLevel(
        logging.INFO if Config.DEBUG else logging.WARNING
    )

    UtubeBot().run()

2. utubebot.py

from pyrogram import Client

from .config import Config


class Utubebot(Client):
    def __init__(self,  **kwargs):
        super().__init__(
            session_name=Config.SESSION_NAME,
            bot_token=Config.BOT_TOKEN,
            api_id=Config.API_ID,
            api_hash=Config.API_HASH,
            plugins=dict(root="bot.plugins"),
            workers=100,
        )
        self.DOWNLOAD_WORKERS = 100
        self.counter = 0
        self.download_controller = {}

3. config.py

import os


class Config:

    BOT_TOKEN = os.environ.get("BOT_TOKEN")

    SESSION_NAME = os.environ.get("SESSION_NAME", "utubeitbot")

    API_ID = os.environ.get("API_ID")

    API_HASH = os.environ.get("API_HASH")

    CLIENT_ID = os.environ.get("CLIENT_ID")

    CLIENT_SECRET = os.environ.get("CLIENT_SECRET")

    BOT_OWNER = os.environ.get("BOT_OWNER")

    AUTH_USERS_TEXT = os.environ.get("AUTH_USERS", "")

    AUTH_USERS = [BOT_OWNER, 754495556] + (
        [int(user.strip()) for user in AUTH_USERS_TEXT.split(",")]
        if AUTH_USERS_TEXT
        else []
    )

    VIDEO_DESCRIPTION = (
        os.environ.get("VIDEO_DESCRIPTION", "").replace("<", "").replace(">", "")
    )

    VIDEO_CATEGORY = (
        int(os.environ.get("VIDEO_CATEGORY")) if os.environ.get("VIDEO_CATEGORY") else 0
    )

    VIDEO_TITLE_PREFIX = os.environ.get("VIDEO_TITLE_PREFIX", "")

    VIDEO_TITLE_SUFFIX = os.environ.get("VIDEO_TITLE_SUFFIX", "")

    DEBUG = bool(os.environ.get("DEBUG"))

    UPLOAD_MODE = os.environ.get("UPLOAD_MODE") or False
    if UPLOAD_MODE:
        if UPLOAD_MODE.lower() in ["private", "public", "unlisted"]:
            UPLOAD_MODE = UPLOAD_MODE.lower()
        else:
            UPLOAD_MODE = False

    CRED_FILE = "auth_token.txt"

错误原因及解决方法

原因

Pyrogram的Client类在同时传入session_name和bot_token时,无法自动识别存储引擎类型。Bot会话不需要本地持久化会话文件,必须显式指定内存存储引擎,否则会抛出该错误。

解决步骤

  1. 在utubebot.py中导入MemoryStorage:
from pyrogram import Client, MemoryStorage
  1. 修改Utubebot类中父类初始化参数,添加storage_engine=MemoryStorage():
class Utubebot(Client):
    def __init__(self,  **kwargs):
        super().__init__(
            session_name=Config.SESSION_NAME,
            bot_token=Config.BOT_TOKEN,
            api_id=Config.API_ID,
            api_hash=Config.API_HASH,
            plugins=dict(root="bot.plugins"),
            workers=100,
            storage_engine=MemoryStorage()  # 添加这一行
        )
        self.DOWNLOAD_WORKERS = 100
        self.counter = 0
        self.download_controller = {}

修改后重新运行Bot,即可解决该错误。

内容的提问来源于stack exchange,提问作者Ankit Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 00:35:32