Skip to content

Instantly share code, notes, and snippets.

@AlgorithmAlchemy
Last active June 29, 2023 10:51
Show Gist options
  • Save AlgorithmAlchemy/ce1e35071b63a9b5a84acfccf6dc0e71 to your computer and use it in GitHub Desktop.
Save AlgorithmAlchemy/ce1e35071b63a9b5a84acfccf6dc0e71 to your computer and use it in GitHub Desktop.
Aiogram Sub Checker
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