File size: 6,690 Bytes
0d887f0
28a690f
3fb2204
42a7e92
0d887f0
42a7e92
28a690f
fac74eb
0d887f0
3925c05
8f3b78a
42a7e92
 
6adc97f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
709df35
0d887f0
fac74eb
0d887f0
 
 
 
 
fac74eb
0d887f0
 
fac74eb
 
 
c68d102
fac74eb
c68d102
fac74eb
c68d102
fac74eb
8956518
fac74eb
 
3fb2204
fac74eb
3fb2204
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
fac74eb
 
3fb2204
0d887f0
 
 
 
fac74eb
0d887f0
fac74eb
 
 
 
 
0d887f0
6adc97f
0d887f0
42a7e92
 
fac74eb
0d887f0
fac74eb
0d887f0
 
 
8f3b78a
0d887f0
fac74eb
0d887f0
 
 
fac74eb
0d887f0
 
fac74eb
0d887f0
 
 
 
 
fac74eb
0d887f0
 
 
fac74eb
 
0d887f0
 
 
6adc97f
0d887f0
42a7e92
 
4d26969
3925c05
 
 
 
 
c68d102
725787c
6fefa14
3925c05
b68c1ea
 
c68d102
3925c05
 
 
 
6fefa14
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
fac74eb
4d26969
42a7e92
725787c
42a7e92
725787c
3eef6ec
725787c
 
42a7e92
3925c05
0d887f0
725787c
 
 
 
0d887f0
fac74eb
0d887f0
fac74eb
0d887f0
28a690f
42a7e92
fac74eb
28a690f
fac74eb
42a7e92
0d887f0
 
 
 
fac74eb
 
 
0d887f0
a06c0e6
0d887f0
 
42a7e92
8a5a595
709df35
8e6421c
709df35
8e6421c
 
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
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
import os
from traceback import format_exc
from datetime import datetime

from pyrogram.types import Message

from Powers import DEV_USERS, SUDO_USERS, WHITELIST_USERS, SUPPORT_STAFF, LOGGER
from Powers.bot_class import Gojo
from Powers.utils.custom_filters import command
from Powers.utils.extract_user import extract_user
from Powers.utils.chat_type import c_type


escape = "\n"
empty = " "

bold = lambda x: f"**{x}:** "
bold_ul = lambda x: f"**--{x}:**-- "

single_func = lambda x: f"`{x}`{escape}"


def change(
        title: str,
        body: dict,
        indent: int = 2,
        underline: bool = False,
) -> str:
    text = (bold_ul(title) + escape) if underline else bold(title) + escape

    for key, value in body.items():
        text += (
                indent * empty
                + bold(key)
                + ((value[0] + escape) if isinstance(value, list) else single_func(value))
        )
    return text


async def user_info(user, already=False):
    if not already:
        user = await Gojo.get_users(user)
    if not user.first_name:
        return ["Deleted account", None]
    user_id = user.id
    username = user.username
    first_name = user.first_name
    mention = user.mention(f"{first_name}")
    dc_id = user.dc_id
    photo_id = user.photo.big_file_id if user.photo else None
    is_support = user_id in SUPPORT_STAFF
    if user_id in SUPPORT_STAFF:
        if user_id in DEV_USERS:
            omp = "User is dev"
        elif user_id in SUDO_USERS:
            omp = "User is sudoer"
        elif user_id in WHITELIST_USERS:
            omp = "User is in whitelist"
        else:
            omp = "Hmmm.......Who is that again?"
    is_bot = user.is_bot
    is_fake = user.is_fake
    
    status = user.status
        
        
    if is_bot is True:
        last_date = "Targeted user is a bot"
    elif status == "recently":
        last_date = "Recently"
    elif status == "within_week":
        last_date = "Within the last week"
    elif status == "within_month":
        last_date = "Within the last month"
    elif status == "long_time_ago":
        last_date = "A long time ago or may be I am blocked by the user  :("
    elif status == "online":
        last_date = "Currently Online"
    elif status == "offline":
        last_date = datetime.fromtimestamp(user.status.date).strftime(
            "%a, %d %b %Y, %H:%M:%S"
        )  
    else:
        last_date = "User is currently online"
        
    body = {
        "ID": user_id,
        "DC": dc_id,
        "Name": [first_name],
        "Username": [("@" + username) if username else None],
        "Mention": [mention],
        "Support": is_support,
        "Support user type": [omp],
        "Bot" : is_bot,
        "Fake" : is_fake,
        "Last seen" : [last_date],
    }
    caption = change("User info", body)
    return [caption, photo_id]


async def chat_info(chat, already=False):
    if not already:
        chat = await Gojo.get_chat(chat)
    chat_id = chat.id
    username = chat.username
    title = chat.title
    type_ = c_type(chat)
    is_scam = chat.is_scam
    is_fake = chat.is_fake
    description = chat.description
    members = chat.members_count
    is_restricted = chat.is_restricted
    link = f"[Link](t.me/{username})" if username else None
    dc_id = chat.dc_id
    photo_id = chat.photo.big_file_id if chat.photo else None
    can_save = chat.has_protected_content
    body = {
        "ID": chat_id,
        "DC": dc_id,
        "Type": type_,
        "Name": [title],
        "Username": [("@" + username) if username else None],
        "Mention": [link],
        "Members": members,
        "Scam": is_scam,
        "Fake" : is_fake,
        "Can save content" : can_save,
        "Restricted": is_restricted,
        "Description": [description],
    }
    caption = change("Chat info", body)
    return [caption, photo_id]


@Gojo.on_message(command("info"))
async def info_func(c: Gojo, message: Message):
    if len(message.text.split()) == 1 and not message.reply_to_message:
        await message.reply_text(text="I can't info fecth of nothing!")
        await message.stop_propagation()
    elif len(message.text.split()) > 2 and not message.reply_to_message:
        await message.reply_text("You are not providing proper arguments.......**Usage:**/info [USERNAME|ID]....Example /info @iamgojoof6eyes")
        await message.stop_propagation()

    try:
        user, _ , _= await extract_user(c , message)
    except Exception as e:
        return await message.reply_text(f"Got an error while running extract_user function error is {e}.....Give this message in supoort group")
    
    if not user:
        message.reply_text("Can't find user to fetch info!")
    
    m = await message.reply_text(f"Fetching user info of user {user}...")

    try:
        info_caption, photo_id = await user_info(user)
        LOGGER.info(f"{message.from_user.id} tried to fetch user info of user {user} in {m.chat.id}")
    except Exception as e:
        LOGGER.error(e)
        LOGGER.error(format_exc())
        return await m.edit(str(e))

    if not photo_id:
        return await m.edit(info_caption, disable_web_page_preview=True)
    photo = await Gojo.download_media(photo_id)

    await message.reply_photo(photo, caption=info_caption, quote=False)
    await m.delete()
    os.remove(photo)
    LOGGER.info(f"{message.from_user.id} fetched user info of user {user} in {m.chat.id}")



@Gojo.on_message(command("chinfo"))
async def chat_info_func(_, message: Message):
    splited = message.text.split()
    try:
        if len(splited) == 1:
            return await message.reply_text("I can't fetch nothing......")

        elif len(splited) > 2:
            return await message.reply_text(
                "**Usage:**/chinfo [USERNAME|ID]"
            )
        
        else:
            chat = splited[1]
        

        m = await message.reply_text(f"Fetching chat info of chat {chat}.....")

        info_caption, photo_id = await chat_info(chat)
        if not photo_id:
            return await m.edit(info_caption, disable_web_page_preview=True)

        photo = await Gojo.download_media(photo_id)
        await message.reply_photo(photo, caption=info_caption, quote=False)
        LOGGER.info(f"{message.from_user.id} fetched chat info of user {chat} in {m.chat.id}")

        await m.delete()
        os.remove(photo)
    except Exception as e:
        await m.edit(e)
        LOGGER.error(e)
        LOGGER.error(format_exc())

__PLUGIN__ = "info"
__alt_name__ = [
    "info",
    "chinfo",
] 

__HELP__ = """
***Information***

* /info - To get info about the user
* /chinfo - To get info about the chat"""