| |
| |
| |
| |
| |
| |
|
|
| from datetime import datetime as dt |
|
|
| from telethon.events import NewMessage |
| from telethon.tl.types import ( |
| Message, |
| MessageEntityMention, |
| MessageEntityMentionName, |
| User, |
| ) |
| from telethon.utils import get_display_name |
|
|
| from pyUltroid.fns.helper import inline_mention, time_formatter |
|
|
| from . import asst, asst_cmd |
|
|
| AFK = {} |
|
|
|
|
| @asst_cmd(pattern="afk", func=lambda x: not x.is_private) |
| async def go_afk(event): |
| sender = await event.get_sender() |
| if (not isinstance(sender, User)) or sender.bot: |
| return |
| try: |
| reason = event.text.split(" ", maxsplit=1)[1] |
| except IndexError: |
| reason = None |
| if event.is_reply and not reason: |
| replied = await event.get_reply_message() |
| if not reason and replied.text and not replied.media: |
| reason = replied.text |
| else: |
| reason = replied |
| time_ = dt.now() |
| if AFK.get(event.chat_id): |
| AFK[event.chat_id].update({event.sender_id: {"reason": reason, "time": time_}}) |
| else: |
| AFK.update( |
| {event.chat_id: {event.sender_id: {"reason": reason, "time": time_}}} |
| ) |
| mention = inline_mention(sender) |
| msg = f"**{mention} went AFK Now!**" |
| if reason and not isinstance(reason, str): |
| await event.reply(reason) |
| else: |
| msg += f"\n\n**Reason : ** `{reason}`" |
| await event.reply(msg) |
|
|
|
|
| @asst.on(NewMessage(func=lambda x: AFK.get(x.chat_id) and not x.is_private)) |
| async def make_change(event): |
| if event.text.startswith("/afk"): |
| return |
| sender = await event.get_sender() |
| if (not isinstance(sender, User)) or sender.bot: |
| return |
| chat_ = AFK[event.chat_id] |
| if event.sender_id in chat_.keys(): |
| name = get_display_name(event.sender) |
| cha_send = chat_[event.sender_id] |
| time_ = time_formatter((dt.now() - cha_send["time"]).seconds * 1000) |
| msg = f"**{name}** is No Longer AFK!\n**Was AFK for** {time_}" |
| await event.reply(msg) |
| del chat_[event.sender_id] |
| if not chat_: |
| del AFK[event.chat_id] |
| ST_SPAM = [] |
| replied = await event.get_reply_message() |
| if replied: |
| name = get_display_name(replied.sender) |
| if replied.sender_id in chat_.keys(): |
| s_der = chat_[replied.sender_id] |
| res_ = s_der["reason"] |
| time_ = time_formatter((dt.now() - s_der["time"]).seconds * 1000) |
| msg = f"**{name}** is AFK Currently!\n**From :** {time_}" |
| if res_ and isinstance(res_, str): |
| msg += f"\n**Reason :** {res_}" |
| elif res_ and isinstance(res_, Message): |
| await event.reply(res_) |
| await event.reply(msg) |
| ST_SPAM.append(replied.sender_id) |
| for ent, text in event.get_entities_text(): |
| dont_send, entity = None, None |
| if isinstance(ent, MessageEntityMentionName): |
| c_id = ent.user_id |
| elif isinstance(ent, MessageEntityMention): |
| c_id = text |
| else: |
| c_id = None |
| if c_id: |
| entity = await event.client.get_entity(c_id) |
| if entity and entity.id in chat_.keys() and entity.id not in ST_SPAM: |
| ST_SPAM.append(entity.id) |
| s_der = chat_[entity.id] |
| name = get_display_name(entity) |
| res_ = s_der["reason"] |
| time_ = time_formatter((dt.now() - s_der["time"]).seconds * 1000) |
| msg = f"**{name}** is AFK Currently!\n**From :** {time_}" |
| if res_ and isinstance(res_, str): |
| msg += f"\n**Reason :** {res_}" |
| elif res_ and isinstance(res_, Message): |
| await event.reply(res_) |
| await event.reply(msg) |
|
|