forked from HA-Bots/Auto-Filter-Bot
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbot.py
More file actions
111 lines (98 loc) · 4.03 KB
/
bot.py
File metadata and controls
111 lines (98 loc) · 4.03 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
import logging
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s',
handlers=[logging.StreamHandler()]
)
logging.getLogger('hydrogram').setLevel(logging.ERROR)
logger = logging.getLogger(__name__)
import os
import time
import asyncio
import uvloop
from hydrogram import types
from hydrogram import Client
from hydrogram.errors import FloodWait
from aiohttp import web
from typing import Union, Optional, AsyncGenerator
from web import web_app
from info import INDEX_CHANNELS, SUPPORT_GROUP, LOG_CHANNEL, API_ID, DATA_DATABASE_URL, API_HASH, BOT_TOKEN, PORT, BIN_CHANNEL, ADMINS, SECOND_FILES_DATABASE_URL, FILES_DATABASE_URL
from utils import temp, get_readable_time, check_premium
from database.users_chats_db import db
from pymongo.mongo_client import MongoClient
from pymongo.server_api import ServerApi
uvloop.install()
class Bot(Client):
def __init__(self):
super().__init__(
name='Auto_Filter_Bot',
api_id=API_ID,
api_hash=API_HASH,
bot_token=BOT_TOKEN,
plugins={"root": "plugins"}
)
async def start(self):
await super().start()
temp.START_TIME = time.time()
b_users, b_chats = await db.get_banned()
temp.BANNED_USERS = b_users
temp.BANNED_CHATS = b_chats
if os.path.exists('restart.txt'):
with open("restart.txt") as file:
chat_id, msg_id = map(int, file)
try:
await self.edit_message_text(chat_id=chat_id, message_id=msg_id, text='Restarted Successfully!')
except:
pass
os.remove('restart.txt')
temp.BOT = self
me = await self.get_me()
temp.ME = me.id
temp.U_NAME = me.username
temp.B_NAME = me.first_name
app = web.AppRunner(web_app)
await app.setup()
await web.TCPSite(app, "0.0.0.0", PORT).start()
asyncio.create_task(check_premium(self))
try:
await self.send_message(chat_id=LOG_CHANNEL, text=f"<b>{me.mention} Restarted! 🤖</b>")
except:
logger.error("Make sure bot admin in LOG_CHANNEL, exiting now")
exit()
logger.info(f"@{me.username} is started now ✓")
async def stop(self, *args):
await super().stop()
logger.info("Bot Stopped! Bye...")
async def iter_messages(self: Client, 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:`~hydrogram.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:`~hydrogram.types.Message` objects.
Example:
.. code-block:: python
async for message in app.iter_messages("HA_Bots", 1000, 100):
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()