Spaces:
Paused
Paused
import logging | |
import logging.config | |
# Get logging configurations | |
logging.config.fileConfig('logging.conf') | |
logging.getLogger().setLevel(logging.INFO) | |
logging.getLogger("pyrogram").setLevel(logging.ERROR) | |
logging.getLogger("imdbpy").setLevel(logging.ERROR) | |
from pyrogram import Client, __version__ | |
from pyrogram.raw.all import layer | |
from database.ia_filterdb import Media | |
from database.users_chats_db import db | |
from info import SESSION, API_ID, API_HASH, BOT_TOKEN, LOG_STR, LOG_CHANNEL, PORT | |
from utils import temp | |
from typing import Union, Optional, AsyncGenerator | |
from pyrogram import types | |
from Script import script | |
from datetime import date, datetime | |
import pytz | |
from aiohttp import web | |
from plugins import web_server | |
class Bot(Client): | |
def __init__(self): | |
super().__init__( | |
name=SESSION, | |
api_id=API_ID, | |
api_hash=API_HASH, | |
bot_token=BOT_TOKEN, | |
workers=50, | |
plugins={"root": "plugins"}, | |
sleep_threshold=5, | |
) | |
async def start(self): | |
b_users, b_chats = await db.get_banned() | |
temp.BANNED_USERS = b_users | |
temp.BANNED_CHATS = b_chats | |
await super().start() | |
await Media.ensure_indexes() | |
me = await self.get_me() | |
temp.ME = me.id | |
temp.U_NAME = me.username | |
temp.B_NAME = me.first_name | |
self.username = '@' + me.username | |
logging.info(f"{me.first_name} with for Pyrogram v{__version__} (Layer {layer}) started on {me.username}.") | |
logging.info(LOG_STR) | |
logging.info(script.LOGO) | |
tz = pytz.timezone('Asia/Kolkata') | |
today = date.today() | |
now = datetime.now(tz) | |
time = now.strftime("%H:%M:%S %p") | |
await self.send_message(chat_id=LOG_CHANNEL, text=script.RESTART_TXT.format(today, time)) | |
app = web.AppRunner(await web_server()) | |
await app.setup() | |
bind_address = "0.0.0.0" | |
await web.TCPSite(app, bind_address, PORT).start() | |
async def stop(self, *args): | |
await super().stop() | |
logging.info("Bot stopped. Bye.") | |
async def iter_messages( | |
self, | |
chat_id: Union[int, str], | |
limit: int, | |
offset: int = 0, | |
) -> Optional[AsyncGenerator["types.Message", None]]: | |
"""Iterate through a chat sequentially. | |
This convenience method does the same as repeatedly calling :meth:`~pyrogram.Client.get_messages` in a loop, thus saving | |
you from the hassle of setting up boilerplate code. It is useful for getting the whole chat messages with a | |
single call. | |
Parameters: | |
chat_id (``int`` | ``str``): | |
Unique identifier (int) or username (str) of the target chat. | |
For your personal cloud (Saved Messages) you can simply use "me" or "self". | |
For a contact that exists in your Telegram address book you can use his phone number (str). | |
limit (``int``): | |
Identifier of the last message to be returned. | |
offset (``int``, *optional*): | |
Identifier of the first message to be returned. | |
Defaults to 0. | |
Returns: | |
``Generator``: A generator yielding :obj:`~pyrogram.types.Message` objects. | |
Example: | |
.. code-block:: python | |
for message in app.iter_messages("pyrogram", 1, 15000): | |
print(message.text) | |
""" | |
current = offset | |
while True: | |
new_diff = min(200, limit - current) | |
if new_diff <= 0: | |
return | |
messages = await self.get_messages(chat_id, list(range(current, current+new_diff+1))) | |
for message in messages: | |
yield message | |
current += 1 | |
app = Bot() | |
app.run() | |