sqlite telethon数据库锁定,我需要优化

jckbn6z7  于 2023-08-06  发布在  SQLite
关注(0)|答案(1)|浏览(151)

数据库被锁定,甚至不能启动程序
如何使它不创建新会话,而是连接到旧会话?
我被禁是因为太多的关系。我不知道该怎么办。

import logging
import os
import download
import yt_dlp
import list
from dotenv import load_dotenv
import time
load_dotenv()
chats = list.chats
api_id = os.getenv("api_id")
api_hash = os.getenv("api_hash")
logging.basicConfig(
    format="[%(levelname) 5s/%(asctime)s] %(name)s: %(message)s", level=logging.WARNING
)

def downloadvideo(link):
    with yt_dlp.YoutubeDL() as ydl:
        ydl.download(link)

from telethon import TelegramClient, events
client = TelegramClient('anon', api_id, api_hash)

@client.on(
    events.NewMessage(
        chats=chats,
        pattern=r"(?:https?://)?(?:www\.)?(?:youtube\.com|youtu\.be|tiktok\.com)",
    )
)
async def my_event_handler(event):
    if event.chat_id in chats:
        message_id = event.id
        video = download.downloadvideo(event.message.message)
        message = f"[link]({event.message.message})"
        await client.send_file(
            -1001673012624,
            reply_to=message_id,
            file="telegramvideo.mp4",
            video_note=True,
            caption=message,
        )
        os.remove("telegramvideo.mp4")

phone = os.getenv("phone")
# -1001919227306 maratozpanov
client.start(phone=phone)

字符串
删除会话文件。我以为我删了之后会有用的。

vhmi4jdf

vhmi4jdf1#

你在一个不同的问题中发布了很多不同的问题。
如何使它不创建新会话,而是连接到旧会话?
只需使用与TelegramClient构造函数的第一个参数相同的会话名称即可完成此操作。
我被封杀是因为人脉太多
Telegram decides when the bans occur。这不是库可以帮助的。特别是VoIP号码很容易被禁止。

with yt_dlp.YoutubeDL() ...

字符串
我不熟悉yt_dlp,但如果库是线程的,请注意Telethon使用asyncio。如果asyncio事件循环无法运行(因为线程被阻塞),则可能会发生错误。
我建议您阅读asyncio文档,了解如何在执行器中运行阻塞函数。
sqlite3.OperationalError: database is locked
这可能意味着会话文件正被多个进程使用。确保一次只有一个进程访问同一会话文件。如果需要多个并发进程,请使用多个会话。
telethon.errors.rpcerrorlist.FloodWaitError
这意味着你已经尝试了太多次请求,Telegram正在限制你的速度。您只能等待,并避免如此频繁地发出请求(可能与重用会话的问题有关,在其他点中解决)。
UserWarning: the session already had an authorized user so it did not login to the user account using the provided phone (it may not be using the user you expect)
这意味着您尝试重用的会话以前已登录,但现在您提供了不同的电话。因此,图书馆会警告您,它忽略了新手机,因为该帐户已经登录。

相关问题