数据库被锁定,甚至不能启动程序
如何使它不创建新会话,而是连接到旧会话?
我被禁是因为太多的关系。我不知道该怎么办。
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)
字符串
删除会话文件。我以为我删了之后会有用的。
1条答案
按热度按时间vhmi4jdf1#
你在一个不同的问题中发布了很多不同的问题。
如何使它不创建新会话,而是连接到旧会话?
只需使用与
TelegramClient
构造函数的第一个参数相同的会话名称即可完成此操作。我被封杀是因为人脉太多
Telegram decides when the bans occur。这不是库可以帮助的。特别是VoIP号码很容易被禁止。
字符串
我不熟悉
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)
个这意味着您尝试重用的会话以前已登录,但现在您提供了不同的电话。因此,图书馆会警告您,它忽略了新手机,因为该帐户已经登录。