-
Notifications
You must be signed in to change notification settings - Fork 945
Expand file tree
/
Copy pathplans.py
More file actions
242 lines (197 loc) · 12 KB
/
plans.py
File metadata and controls
242 lines (197 loc) · 12 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
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
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
# ---------------------------------------------------
# File Name: plans.py
# Description: A Pyrogram bot for downloading files from Telegram channels or groups
# and uploading them back to Telegram.
# Author: Gagan
# GitHub: https://github.com/devgaganin/
# Telegram: https://t.me/team_spy_pro
# YouTube: https://youtube.com/@dev_gagan
# Created: 2025-01-11
# Last Modified: 2025-01-11
# Version: 2.0.5
# License: MIT License
# ---------------------------------------------------
from datetime import timedelta
import pytz
import datetime, time
from devgagan import app
import asyncio
from config import OWNER_ID
from devgagan.core.func import get_seconds
from devgagan.core.mongo import plans_db
from pyrogram import filters
@app.on_message(filters.command("rem") & filters.user(OWNER_ID))
async def remove_premium(client, message):
if len(message.command) == 2:
user_id = int(message.command[1])
user = await client.get_users(user_id)
data = await plans_db.check_premium(user_id)
if data and data.get("_id"):
await plans_db.remove_premium(user_id)
await message.reply_text("ᴜꜱᴇʀ ʀᴇᴍᴏᴠᴇᴅ ꜱᴜᴄᴄᴇꜱꜱꜰᴜʟʟʏ !")
await client.send_message(
chat_id=user_id,
text=f"<b>ʜᴇʏ {user.mention},\n\nʏᴏᴜʀ ᴘʀᴇᴍɪᴜᴍ ᴀᴄᴄᴇss ʜᴀs ʙᴇᴇɴ ʀᴇᴍᴏᴠᴇᴅ.\nᴛʜᴀɴᴋ ʏᴏᴜ ꜰᴏʀ ᴜsɪɴɢ ᴏᴜʀ sᴇʀᴠɪᴄᴇ 😊.</b>"
)
else:
await message.reply_text("ᴜɴᴀʙʟᴇ ᴛᴏ ʀᴇᴍᴏᴠᴇ ᴜꜱᴇᴅ !\nᴀʀᴇ ʏᴏᴜ ꜱᴜʀᴇ, ɪᴛ ᴡᴀꜱ ᴀ ᴘʀᴇᴍɪᴜᴍ ᴜꜱᴇʀ ɪᴅ ?")
else:
await message.reply_text("ᴜꜱᴀɢᴇ : /rem user_id")
@app.on_message(filters.command("myplan"))
async def myplan(client, message):
user_id = message.from_user.id
user = message.from_user.mention
data = await plans_db.check_premium(user_id)
if data and data.get("expire_date"):
expiry = data.get("expire_date")
expiry_ist = expiry.astimezone(pytz.timezone("Asia/Kolkata"))
expiry_str_in_ist = expiry.astimezone(pytz.timezone("Asia/Kolkata")).strftime("%d-%m-%Y\n⏱️ ᴇxᴘɪʀʏ ᴛɪᴍᴇ : %I:%M:%S %p")
current_time = datetime.datetime.now(pytz.timezone("Asia/Kolkata"))
time_left = expiry_ist - current_time
days = time_left.days
hours, remainder = divmod(time_left.seconds, 3600)
minutes, seconds = divmod(remainder, 60)
time_left_str = f"{days} ᴅᴀʏꜱ, {hours} ʜᴏᴜʀꜱ, {minutes} ᴍɪɴᴜᴛᴇꜱ"
await message.reply_text(f"⚜️ ᴘʀᴇᴍɪᴜᴍ ᴜꜱᴇʀ ᴅᴀᴛᴀ :\n\n👤 ᴜꜱᴇʀ : {user}\n⚡ ᴜꜱᴇʀ ɪᴅ : <code>{user_id}</code>\n⏰ ᴛɪᴍᴇ ʟᴇꜰᴛ : {time_left_str}\n⌛️ ᴇxᴘɪʀʏ ᴅᴀᴛᴇ : {expiry_str_in_ist}")
else:
await message.reply_text(f"ʜᴇʏ {user},\n\nʏᴏᴜ ᴅᴏ ɴᴏᴛ ʜᴀᴠᴇ ᴀɴʏ ᴀᴄᴛɪᴠᴇ ᴘʀᴇᴍɪᴜᴍ ᴘʟᴀɴs")
@app.on_message(filters.command("check") & filters.user(OWNER_ID))
async def get_premium(client, message):
if len(message.command) == 2:
user_id = int(message.command[1])
user = await client.get_users(user_id)
data = await plans_db.check_premium(user_id)
if data and data.get("expire_date"):
expiry = data.get("expire_date")
expiry_ist = expiry.astimezone(pytz.timezone("Asia/Kolkata"))
expiry_str_in_ist = expiry.astimezone(pytz.timezone("Asia/Kolkata")).strftime("%d-%m-%Y\n⏱️ ᴇxᴘɪʀʏ ᴛɪᴍᴇ : %I:%M:%S %p")
current_time = datetime.datetime.now(pytz.timezone("Asia/Kolkata"))
time_left = expiry_ist - current_time
days = time_left.days
hours, remainder = divmod(time_left.seconds, 3600)
minutes, seconds = divmod(remainder, 60)
time_left_str = f"{days} days, {hours} hours, {minutes} minutes"
await message.reply_text(f"⚜️ ᴘʀᴇᴍɪᴜᴍ ᴜꜱᴇʀ ᴅᴀᴛᴀ :\n\n👤 ᴜꜱᴇʀ : {user.mention}\n⚡ ᴜꜱᴇʀ ɪᴅ : <code>{user_id}</code>\n⏰ ᴛɪᴍᴇ ʟᴇꜰᴛ : {time_left_str}\n⌛️ ᴇxᴘɪʀʏ ᴅᴀᴛᴇ : {expiry_str_in_ist}")
else:
await message.reply_text("ɴᴏ ᴀɴʏ ᴘʀᴇᴍɪᴜᴍ ᴅᴀᴛᴀ ᴏꜰ ᴛʜᴇ ᴡᴀꜱ ꜰᴏᴜɴᴅ ɪɴ ᴅᴀᴛᴀʙᴀꜱᴇ !")
else:
await message.reply_text("ᴜꜱᴀɢᴇ : /check user_id")
@app.on_message(filters.command("add") & filters.user(OWNER_ID))
async def give_premium_cmd_handler(client, message):
if len(message.command) == 4:
time_zone = datetime.datetime.now(pytz.timezone("Asia/Kolkata"))
current_time = time_zone.strftime("%d-%m-%Y\n⏱️ ᴊᴏɪɴɪɴɢ ᴛɪᴍᴇ : %I:%M:%S %p")
user_id = int(message.command[1])
user = await client.get_users(user_id)
time = message.command[2]+" "+message.command[3]
seconds = await get_seconds(time)
if seconds > 0:
expiry_time = datetime.datetime.now() + datetime.timedelta(seconds=seconds)
await plans_db.add_premium(user_id, expiry_time)
data = await plans_db.check_premium(user_id)
expiry = data.get("expire_date")
expiry_str_in_ist = expiry.astimezone(pytz.timezone("Asia/Kolkata")).strftime("%d-%m-%Y\n⏱️ ᴇxᴘɪʀʏ ᴛɪᴍᴇ : %I:%M:%S %p")
await message.reply_text(f"ᴘʀᴇᴍɪᴜᴍ ᴀᴅᴅᴇᴅ ꜱᴜᴄᴄᴇꜱꜱꜰᴜʟʟʏ ✅\n\n👤 ᴜꜱᴇʀ : {user.mention}\n⚡ ᴜꜱᴇʀ ɪᴅ : <code>{user_id}</code>\n⏰ ᴘʀᴇᴍɪᴜᴍ ᴀᴄᴄᴇꜱꜱ : <code>{time}</code>\n\n⏳ ᴊᴏɪɴɪɴɢ ᴅᴀᴛᴇ : {current_time}\n\n⌛️ ᴇxᴘɪʀʏ ᴅᴀᴛᴇ : {expiry_str_in_ist} \n\n__**Powered by Joseph__**", disable_web_page_preview=True)
await client.send_message(
chat_id=user_id,
text=f"👋 ʜᴇʏ {user.mention},\nᴛʜᴀɴᴋ ʏᴏᴜ ꜰᴏʀ ᴘᴜʀᴄʜᴀꜱɪɴɢ ᴘʀᴇᴍɪᴜᴍ.\nᴇɴᴊᴏʏ !! ✨🎉\n\n⏰ ᴘʀᴇᴍɪᴜᴍ ᴀᴄᴄᴇꜱꜱ : <code>{time}</code>\n⏳ ᴊᴏɪɴɪɴɢ ᴅᴀᴛᴇ : {current_time}\n\n⌛️ ᴇxᴘɪʀʏ ᴅᴀᴛᴇ : {expiry_str_in_ist}", disable_web_page_preview=True
)
else:
await message.reply_text("Invalid time format. Please use '1 day for days', '1 hour for hours', or '1 min for minutes', or '1 month for months' or '1 year for year'")
else:
await message.reply_text("Usage : /add user_id time (e.g., '1 day for days', '1 hour for hours', or '1 min for minutes', or '1 month for months' or '1 year for year')")
@app.on_message(filters.command("transfer"))
async def transfer_premium(client, message):
if len(message.command) == 2:
new_user_id = int(message.command[1]) # The user ID to whom premium is transferred
sender_user_id = message.from_user.id # The current premium user issuing the command
sender_user = await client.get_users(sender_user_id)
new_user = await client.get_users(new_user_id)
# Fetch sender's premium plan details
data = await plans_db.check_premium(sender_user_id)
if data and data.get("_id"): # Verify sender is already a premium user
expiry = data.get("expire_date")
# Remove premium for the sender
await plans_db.remove_premium(sender_user_id)
# Add premium for the new user with the same expiry date
await plans_db.add_premium(new_user_id, expiry)
# Convert expiry date to IST format for display
expiry_str_in_ist = expiry.astimezone(pytz.timezone("Asia/Kolkata")).strftime(
"%d-%m-%Y\n⏱️ **Expiry Time:** %I:%M:%S %p"
)
time_zone = datetime.datetime.now(pytz.timezone("Asia/Kolkata"))
current_time = time_zone.strftime("%d-%m-%Y\n⏱️ **Transfer Time:** %I:%M:%S %p")
# Confirmation message to the sender
await message.reply_text(
f"✅ **Premium Plan Transferred Successfully!**\n\n"
f"👤 **From:** {sender_user.mention}\n"
f"👤 **To:** {new_user.mention}\n"
f"⏳ **Expiry Date:** {expiry_str_in_ist}\n\n"
f"__Powered by Joseph__ 🚀"
)
# Notification to the new user
await client.send_message(
chat_id=new_user_id,
text=(
f"👋 **Hey {new_user.mention},**\n\n"
f"🎉 **Your Premium Plan has been Transferred!**\n"
f"🛡️ **Transferred From:** {sender_user.mention}\n\n"
f"⏳ **Expiry Date:** {expiry_str_in_ist}\n"
f"📅 **Transferred On:** {current_time}\n\n"
f"__Enjoy the Service!__ ✨"
)
)
else:
await message.reply_text("⚠️ **You are not a Premium user!**\n\nOnly Premium users can transfer their plans.")
else:
await message.reply_text("⚠️ **Usage:** /transfer user_id\n\nReplace `user_id` with the new user's ID.")
async def premium_remover():
all_users = await plans_db.premium_users()
removed_users = []
not_removed_users = []
for user_id in all_users:
try:
user = await app.get_users(user_id)
chk_time = await plans_db.check_premium(user_id)
if chk_time and chk_time.get("expire_date"):
expiry_date = chk_time["expire_date"]
if expiry_date <= datetime.datetime.now():
name = user.first_name
await plans_db.remove_premium(user_id)
await app.send_message(user_id, text=f"Hello {name}, your premium subscription has expired.")
print(f"{name}, your premium subscription has expired.")
removed_users.append(f"{name} ({user_id})")
else:
name = user.first_name
current_time = datetime.datetime.now()
time_left = expiry_date - current_time
days = time_left.days
hours, remainder = divmod(time_left.seconds, 3600)
minutes, seconds = divmod(remainder, 60)
if days > 0:
remaining_time = f"{days} days, {hours} hours, {minutes} minutes, {seconds} seconds"
elif hours > 0:
remaining_time = f"{hours} hours, {minutes} minutes, {seconds} seconds"
elif minutes > 0:
remaining_time = f"{minutes} minutes, {seconds} seconds"
else:
remaining_time = f"{seconds} seconds"
print(f"{name} : Remaining Time : {remaining_time}")
not_removed_users.append(f"{name} ({user_id})")
except:
await plans_db.remove_premium(user_id)
print(f"Unknown users captured : {user_id} removed")
removed_users.append(f"Unknown ({user_id})")
return removed_users, not_removed_users
@app.on_message(filters.command("freez") & filters.user(OWNER_ID))
async def refresh_users(_, message):
removed_users, not_removed_users = await premium_remover()
# Create a summary message
removed_text = "\n".join(removed_users) if removed_users else "No users removed."
not_removed_text = "\n".join(not_removed_users) if not_removed_users else "No users remaining with premium."
summary = (
f"**Here is Summary...**\n\n"
f"> **Removed Users:**\n{removed_text}\n\n"
f"> **Not Removed Users:**\n{not_removed_text}"
)
await message.reply(summary)