-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathapp.py
More file actions
178 lines (149 loc) Β· 6.78 KB
/
app.py
File metadata and controls
178 lines (149 loc) Β· 6.78 KB
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
import asyncio
from telethon import TelegramClient, events, functions, types
from telethon.sessions import StringSession
BOT_TOKEN = "7561524299:AAFjfBmLNx0R9-5IZaN2tz2iJlQK1z3WXlU"
userbot_client = None
userbot_connected = False
is_reporting = False
target_user = None
report_reason = None
bot = TelegramClient("reporter_bot", api_id="29400566", api_hash="8fd30dc496aea7c14cf675f59b74ec6f").start(bot_token=BOT_TOKEN)
@bot.on(events.NewMessage(pattern="/start"))
async def start(event):
await event.respond(
"π€ **Welcome to Reporter Bot!**\n\n"
"Kindly enter your string session to connect to your userbot. Use:\n\n"
"`/connect <string_session>`"
)
@bot.on(events.NewMessage(pattern="/connect (.+)"))
async def connect_userbot(event):
global userbot_client, userbot_connected
string_session = event.pattern_match.group(1)
try:
userbot_client = TelegramClient(StringSession(string_session), api_id="YOUR_API_ID", api_hash="YOUR_API_HASH")
await userbot_client.connect()
if not await userbot_client.is_user_authorized():
await event.respond("β **Invalid string session. Please try again.**")
return
userbot_connected = True
await event.respond("β
**String session successfully connected to userbot!**")
except Exception as e:
await event.respond(f"β **Failed to connect userbot:** {e}")
@bot.on(events.NewMessage(pattern="/report"))
async def report_start(event):
global userbot_connected, target_user
if not userbot_connected:
await event.respond("β **Userbot is not connected. Use `/connect <string_session>` first.**")
return
await event.respond("Kindly enter the username or chat ID of the target:")
target_user = await bot.wait_for(events.NewMessage(from_users=event.sender_id))
try:
target_entity = await userbot_client.get_entity(target_user.text)
entity_type = "Channel" if target_entity.broadcast else "Group"
await event.respond(
f"β
**Target Details:**\n"
f"**Target:** `{target_user.text}`\n"
f"**Target Name:** {target_entity.title}\n"
f"Successfully joined the {entity_type}!"
)
buttons = [
[types.KeyboardButtonCallback("1", b"1"), types.KeyboardButtonCallback("2", b"2"),
types.KeyboardButtonCallback("3", b"3"), types.KeyboardButtonCallback("4", b"4"),
types.KeyboardButtonCallback("5", b"5")],
[types.KeyboardButtonCallback("6", b"6"), types.KeyboardButtonCallback("7", b"7"),
types.KeyboardButtonCallback("8", b"8"), types.KeyboardButtonCallback("9", b"9"),
types.KeyboardButtonCallback("10", b"10")]
]
await event.respond(
"**Select the report type:**\n\n"
"[1] Spam\n[2] Pornography\n[3] Violence\n[4] Child Abuse\n[5] Other\n"
"[6] Copyright\n[7] Fake Account\n[8] Geo Irrelevant\n[9] Illegal Drugs\n[10] Personal Details",
buttons=buttons
)
except Exception as e:
await event.respond(f"β **Failed to find the target:** {e}")
@bot.on(events.CallbackQuery)
async def select_report_type(event):
global report_reason
try:
report_type = int(event.data.decode())
reasons_map = {
1: types.InputReportReasonSpam(),
2: types.InputReportReasonPornography(),
3: types.InputReportReasonViolence(),
4: types.InputReportReasonChildAbuse(),
5: types.InputReportReasonOther(),
6: types.InputReportReasonCopyright(),
7: types.InputReportReasonFake(),
8: types.InputReportReasonGeoIrrelevant(),
9: types.InputReportReasonIllegalDrugs(),
10: types.InputReportReasonPersonalDetails(),
}
report_reason = reasons_map.get(report_type, types.InputReportReasonOther())
await event.respond("Kindly enter the number of reports to send (or type `default` for continuous reports):")
except Exception as e:
await event.respond(f"β **Error selecting report type:** {e}")
@bot.on(events.NewMessage(from_users=lambda u: True))
async def send_reports(event):
global userbot_client, is_reporting, report_reason, target_user
if not is_reporting and target_user and report_reason:
is_reporting = True
try:
target_entity = await userbot_client.get_entity(target_user.text)
except Exception as e:
await event.respond(f"β **Failed to find the target:** {e}")
is_reporting = False
return
num_reports = event.text.strip().lower()
if num_reports == "default":
num_reports = -1
else:
try:
num_reports = int(num_reports)
if num_reports <= 0:
raise ValueError("Invalid number")
except ValueError:
await event.respond("β **Invalid number. Enter a valid number or `default` for continuous.**")
is_reporting = False
return
await event.respond("π **Starting the reporting process...**")
count = 0
try:
while num_reports != 0:
try:
await userbot_client(
functions.account.ReportPeerRequest(
peer=target_entity,
reason=report_reason,
message="Automated report using Reporter Bot"
)
)
count += 1
await asyncio.sleep(2)
if num_reports > 0:
num_reports -= 1
except Exception as e:
await event.respond(f"β **Error during reporting:** {e}")
break
except Exception as e:
await event.respond(f"β **Userbot disconnected:** {e}")
await event.respond(f"β
**Reporting process completed!**\n\nTotal Reports Sent: `{count}`")
is_reporting = False
@bot.on(events.NewMessage(pattern="/disconnect"))
async def disconnect_userbot(event):
global userbot_client, userbot_connected, is_reporting
if not userbot_connected:
await event.respond("β **No userbot is connected.**")
return
if is_reporting:
await event.respond("β οΈ Reporting is in progress. Disconnecting will stop the process.")
is_reporting = False
try:
await userbot_client.disconnect()
userbot_connected = False
userbot_client = None
await event.respond("β
**Userbot disconnected successfully!**")
except Exception as e:
await event.respond(f"β **Failed to disconnect:** {e}")
print("π€ Reporter Bot is running...")
bot.run_until_disconnected()