部署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会话不需要本地持久化会话文件,必须显式指定内存存储引擎,否则会抛出该错误。
解决步骤
- 在
utubebot.py中导入MemoryStorage:
from pyrogram import Client, MemoryStorage
- 修改
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
相关产品推荐
相关产品推荐

