MCPcopy Create free account
hub / github.com/TechifyBots/File-Stream-Bot / broadcast_

Function broadcast_

biisal/bot/plugins/admin.py:29–92  ·  view source on GitHub ↗
(c, m)

Source from the content-addressed store, hash-verified

27
28@StreamBot.on_message(filters.command("broadcast") & filters.private & filters.user(list(Var.OWNER_ID)))
29async def broadcast_(c, m):
30 user_id=m.from_user.id
31 out = await m.reply_text(
32 text=f"Broadcast initiated! You will be notified with log file when all the users are notified."
33 )
34 all_users = await db.get_all_users()
35 broadcast_msg = m.reply_to_message
36 while True:
37 broadcast_id = ''.join([random.choice(string.ascii_letters) for i in range(3)])
38 if not Broadcast_IDs.get(broadcast_id):
39 break
40 start_time = time.time()
41 total_users = await db.total_users_count()
42 done = 0
43 failed = 0
44 success = 0
45 Broadcast_IDs[broadcast_id] = dict(
46 total=total_users,
47 current=done,
48 failed=failed,
49 success=success
50 )
51 async with aiofiles.open('broadcast.txt', 'w') as broadcast_log_file:
52 async for user in all_users:
53 sts, msg = await send_msg(
54 user_id=int(user['id']),
55 message=broadcast_msg
56 )
57 if msg is not None:
58 await broadcast_log_file.write(msg)
59 if sts == 200:
60 success += 1
61 else:
62 failed += 1
63 if sts == 400:
64 await db.delete_user(user['id'])
65 done += 1
66 if Broadcast_IDs.get(broadcast_id) is None:
67 break
68 else:
69 Broadcast_IDs[broadcast_id].update(
70 dict(
71 current=done,
72 failed=failed,
73 success=success
74 )
75 )
76 if Broadcast_IDs.get(broadcast_id):
77 Broadcast_IDs.pop(broadcast_id)
78 completed_in = datetime.timedelta(seconds=int(time.time() - start_time))
79 await asyncio.sleep(3)
80 await out.delete()
81 if failed == 0:
82 await m.reply_text(
83 text=f"broadcast completed in `{completed_in}`\n\nTotal users {total_users}.\nTotal done {done}, {success} success and {failed} failed.",
84 quote=True
85 )
86 else:

Callers

nothing calls this directly

Calls 4

send_msgFunction · 0.90
get_all_usersMethod · 0.80
total_users_countMethod · 0.80
delete_userMethod · 0.80

Tested by

no test coverage detected