Last active
June 29, 2023 10:51
-
-
Save AlgorithmAlchemy/ce1e35071b63a9b5a84acfccf6dc0e71 to your computer and use it in GitHub Desktop.
Aiogram Sub Checker
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
async def suber(us_mission_count, cnt, count_channel, user_id, prize_num): | |
# проверяем количество подписок юзера если 0 выходим из функции | |
if us_mission_count != 0: | |
await asyncio.sleep(1) | |
print(cnt) | |
cursors = connect.execute(f'''SELECT url, chat_id FROM posts ''') | |
# проверяем заранее количество каналов для обязательной подписки | |
ch_count = 0 | |
check_user_subctibe = 0 # проверяем на сколько каналов подписан пользователь | |
for channel in cursors: | |
await asyncio.sleep(1) | |
ch_count += 1 | |
chat_url = channel[0] | |
sub_chat_id = channel[1] | |
try: | |
user_channel_status = await bot.get_chat_member(chat_id=sub_chat_id, user_id=user_id) | |
# us_mission_count -= 1 | |
if user_channel_status["status"] != 'left': | |
if user_channel_status.status == "creator" or user_channel_status.status == "member": | |
check_user_subctibe += 1 | |
# если количество подписок пользователя, совпадает с количеством каналов в базе данных, ок. | |
if count_channel == check_user_subctibe: | |
connect.execute(f'''UPDATE users | |
SET sub_mission = 0 | |
WHERE chat_id = {user_id}''') | |
db.commit() | |
# await send_messages(user_id, "Вы прошли проверку и можете пользоваться ботом!") | |
# pass | |
else: | |
await send_messages(user_id, f"У вас {prize_num} место, но вы не сможете учавствовать в " | |
f"розыгрыше пока не подпишитесь на все чаты: " + chat_url) | |
except aiogram.utils.exceptions.ChatNotFound: | |
await send_messages(user_id, "Ошибка - Chat Not Found - используйте chat_id" + chat_url) | |
except aiogram.utils.exceptions.BotKicked: | |
await send_messages(config.OWNER, f"❗️Бота кикнули из чата/канала - {chat_url}") | |
if us_mission_count == 0: | |
print(user_id, " ok") | |
# await send_messages(user_id, "Вы прошли проверку и можете пользоваться ботом!") | |
async def sub_checker(): | |
while True: | |
await asyncio.sleep(1) | |
count_channel = await channel_sub_count_check() | |
us_cursors = connect.execute( | |
f'''SELECT chat_id, sub_mission, prize_num FROM users WHERE prize_num > 0 AND type = "private" ''') | |
for cnt in us_cursors: | |
await asyncio.sleep(1) | |
print(cnt) | |
user_id = int(cnt[0]) | |
us_mission_count = int(cnt[1]) | |
prize_num = int(cnt[2]) | |
if count_channel == 0: | |
# дропаем если есть цели для подписки | |
ints = 0 | |
await sub_mission_drop(ints) | |
await asyncio.sleep(2) | |
await suber(us_mission_count, cnt, count_channel, user_id, prize_num) | |
# получаем параметры бота | |
async def on_startup(dp): | |
asyncio.create_task(sub_checker()) | |
global me | |
me = (await bot.get_me()).username |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment