File size: 4,464 Bytes
818420a
 
 
f192ee1
818420a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6cef7ec
 
818420a
 
 
 
 
6cef7ec
 
818420a
 
 
 
 
6cef7ec
818420a
 
 
 
6cef7ec
818420a
 
 
 
 
6cef7ec
 
818420a
 
 
89ad488
818420a
89ad488
818420a
89ad488
 
818420a
 
 
d334531
818420a
 
 
 
 
 
 
89ad488
6cef7ec
 
818420a
6cef7ec
818420a
 
 
 
 
 
 
 
 
89ad488
818420a
 
 
 
 
 
 
6cef7ec
 
818420a
 
 
 
 
 
6cef7ec
818420a
 
 
 
 
 
89ad488
818420a
 
 
 
 
 
 
6cef7ec
f192ee1
818420a
6cef7ec
818420a
 
 
 
 
 
 
6cef7ec
 
818420a
6cef7ec
f192ee1
818420a
6cef7ec
818420a
 
6cef7ec
818420a
 
 
 
 
 
 
 
6cef7ec
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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
from datetime import datetime
from random import choice

from pyrogram import ContinuePropagation, filters
from pyrogram.enums import ParseMode as PM
from pyrogram.types import Message

from Powers.bot_class import Gojo
from Powers.database.afk_db import AFK
from Powers.plugins import till_date
from Powers.utils.cmd_senders import send_cmd
from Powers.utils.custom_filters import afk_filter, command
from Powers.utils.msg_types import Types, get_afk_type

res = [
    "{first} is resting for a while...",
    "{first} living his real life, go and live yours.",
    "{first} is quite busy now-a-days.",
    "I am looking for {first} too...tell me if you see him/her around",
    "{first} ran away from the chat...",
    "{first} is busy in his/her work ||simping||",
    "{first} is busy saving the world",
    "{first} is now tired fighting all the curses"
]

back = [
    "{first} is finally back to life",
    "{first} welcome back",
    "{first} the spy is back watch what you talk about"
    "{first} is now finally back from the dead"
]


@Gojo.on_message(command(["afk", "brb"]) & ~filters.private)
async def going_afk(c: Gojo, m: Message):
    user = m.from_user.id
    chat = m.chat.id
    afk = AFK()
    text, data_type, content = await get_afk_type(m)

    time = str(datetime.now()).rsplit(".", 1)[0]

    if len(m.command) == 1:
        text = choice(res)

    elif len(m.command) > 1:
        text = m.text.markdown.split(None, 1)[1]

    if not data_type:
        data_type = Types.TEXT

    afk.insert_afk(chat, user, str(time), text, data_type, content)

    await m.reply_text(f"{m.from_user.mention} is now AFK")

    return


async def get_hours(hour: str):
    tim = hour.strip().split(":")
    txt = ""
    if int(tim[0]):
        txt += f"{tim[0]} hours "
    if int(tim[1]):
        txt += f"{tim[1]} minutes "
    if int(round(float(tim[2]))):
        txt += f"{str(round(float(tim[2])))} seconds"

    return txt


@Gojo.on_message(afk_filter & filters.group)
async def afk_checker(c: Gojo, m: Message):
    afk = AFK()
    back_ = choice(back)
    user = m.from_user.id
    chat = m.chat.id
    repl = m.reply_to_message

    rep_user = repl.from_user.id if repl and repl.from_user else False
    is_afk = afk.check_afk(chat, user)
    is_rep_afk = afk.check_afk(chat, rep_user) if rep_user else False
    if is_rep_afk and rep_user != user:
        con = afk.get_afk(chat, rep_user)
        time = till_date(con["time"])
        media = con["media"]
        media_type = con["media_type"]
        tim_ = datetime.now() - time
        tim_ = str(tim_).split(",")
        tim = await get_hours(tim_[-1])
        if len(tim_) == 1:
            tims = tim
        elif len(tim_) == 2:
            tims = f"{tim_[0]} {tim}"
        reason = f"{repl.from_user.first_name} is afk since {tims}\n"
        if con['reason'] not in res:
            reason += f"\nDue to: {con['reason'].format(first=repl.from_user.first_name)}"
        else:
            reason += f"\n{con['reason'].format(first=repl.from_user.first_name)}"
        txt = reason

        if media_type == Types.TEXT:
            await (await send_cmd(c, media_type))(
                chat,
                txt,
                parse_mode=PM.MARKDOWN,
                reply_to_message_id=m.id,
            )
        else:
            await (await send_cmd(c, media_type))(
                chat,
                media,
                txt,
                parse_mode=PM.MARKDOWN,
                reply_to_message_id=repl.id
            )

    if is_afk:
        txt = False
        try:
            txt = m.command[0]
        except Exception:
            pass

        if txt and txt in ["afk", "brb"]:
            raise ContinuePropagation
        else:
            con = afk.get_afk(chat, user)
            time = till_date(con["time"])
            tim_ = datetime.now() - time
            tim_ = str(tim_).split(",")
            tim = await get_hours(tim_[-1])
            if len(tim_) == 1:
                tims = tim
            elif len(tim_) == 2:
                tims = f"{tim_[0]} {tim}"
            txt = f"{back_.format(first=m.from_user.mention)}\n\nAfk for: {tims}"
            await m.reply_text(txt)
        afk.delete_afk(chat, user)
    raise ContinuePropagation


__PLUGIN__ = "afk"

_DISABLE_CMDS_ = ["afk", "brb"]

__alt_name__ = ["brb"]

__HELP__ = """
**AFK**
• /afk (/brb) [reason | reply to a message]

`reply to a message` can be any media or text
"""