Captain Ezio commited on
Commit
9d5781e
·
1 Parent(s): e7b2c0b

Adding flood and minor changes

Browse files
Powers/database/flood_db.py ADDED
@@ -0,0 +1,66 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from threading import RLock
2
+
3
+ from Powers.database import MongoDB
4
+ from Powers.utils.msg_types import Types
5
+
6
+ INSERTION_LOCK = RLock()
7
+
8
+ class Floods(MongoDB):
9
+ """Class to store flood limit and action of a chat"""
10
+
11
+ db_name = "flood"
12
+
13
+ def __init__(self):
14
+ super().__init__(self.db_name)
15
+
16
+ def save_flood(
17
+ self,
18
+ chat_id: int,
19
+ limit: int,
20
+ within: int,
21
+ action: str,
22
+ ):
23
+ with INSERTION_LOCK:
24
+ curr = self.find_one({"chat_id": chat_id, "limit": limit, "within": within, "action": action})
25
+ if curr:
26
+ if not(limit == int(curr['limit']) or within == int(curr['within']) or action == str(curr['action'])):
27
+ return self.update(
28
+ {
29
+ "_id": chat_id,
30
+ "limit": limit,
31
+ "within": within,
32
+ "action": action,
33
+ }
34
+ )
35
+ return self.insert_one(
36
+ {
37
+ "chat_id" : chat_id,
38
+ "limit": limit,
39
+ "within": within,
40
+ "action" : action
41
+ },
42
+ )
43
+
44
+ def is_chat(self, chat_id: int):
45
+ with INSERTION_LOCK:
46
+ curr = self.find_all({"chat_id": chat_id})
47
+ if curr:
48
+ action = [str(curr['limit']), str(curr['within']), str(curr['action'])]
49
+ return action
50
+ return False
51
+
52
+ def get_action(self, chat_id: int, limit: int, within: int, action: str):
53
+ with INSERTION_LOCK:
54
+ curr = self.find_one({"chat_id": chat_id, "limit": limit, "within": within, "action": action})
55
+ if curr:
56
+ return curr
57
+ return "Flood haven't set"
58
+
59
+ def rm_flood(self, chat_id: int, limit: int, within: int, action: str):
60
+ with INSERTION_LOCK:
61
+ curr = self.find_one({"chat_id": chat_id, "limit": limit, "within": within, "action": action})
62
+ if curr:
63
+ self.delete_one(curr)
64
+ return True
65
+ return False
66
+
Powers/plugins/bans.py CHANGED
@@ -886,7 +886,7 @@ async def unbanbutton(c: Gojo, q: CallbackQuery):
886
  user_id = int(splitter[1])
887
  user = await q.message.chat.get_member(q.from_user.id)
888
 
889
- if not user.can_restrict_members and q.from_user.id != OWNER_ID:
890
  await q.answer(
891
  "You don't have enough permission to do this!\nStay in your limits!",
892
  show_alert=True,
 
886
  user_id = int(splitter[1])
887
  user = await q.message.chat.get_member(q.from_user.id)
888
 
889
+ if not user.privileges.can_restrict_members and q.from_user.id != OWNER_ID:
890
  await q.answer(
891
  "You don't have enough permission to do this!\nStay in your limits!",
892
  show_alert=True,
Powers/plugins/flood.py ADDED
@@ -0,0 +1,247 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import time
2
+
3
+ from pyrogram import filters
4
+ from pyrogram.enums import ChatMemberStatus as CMS
5
+ from pyrogram.enums import ChatType as CT
6
+ from pyrogram.errors import RPCError
7
+ from pyrogram.types import (CallbackQuery, InlineKeyboardButton,
8
+ InlineKeyboardMarkup, Message)
9
+
10
+ from Powers import SUPPORT_STAFF
11
+ from Powers.bot_class import Gojo
12
+ from Powers.database.approve_db import Approve
13
+ from Powers.database.flood_db import Floods
14
+ from Powers.utils.custom_filters import admin_filter, command
15
+ from Powers.utils.kbhelpers import ikb
16
+
17
+ Flood = Floods()
18
+
19
+ approve = Approve()
20
+
21
+ on_key = ["on", "start", "disable"]
22
+ off_key = ["off", "end", "enable", "stop"]
23
+
24
+ close_kb =InlineKeyboardMarkup(
25
+ [
26
+ [
27
+ InlineKeyboardButton(
28
+ "Close ❌",
29
+ callback_data="close"
30
+ )
31
+ ]
32
+ ]
33
+ )
34
+
35
+ action_kb = InlineKeyboardMarkup(
36
+ [
37
+ [
38
+ InlineKeyboardButton(
39
+ "Mute 🔇",
40
+ callback_data="mute"
41
+ ),
42
+ InlineKeyboardButton(
43
+ "Ban 🚷",
44
+ callback_data="ban"
45
+ ),
46
+ InlineKeyboardButton(
47
+ "Kick",
48
+ callback_data="kick"
49
+ )
50
+ ]
51
+ ]
52
+ )
53
+
54
+ within_kb = InlineKeyboardMarkup(
55
+ [
56
+ [
57
+ InlineKeyboardButton(
58
+ "5",
59
+ callback_data="5"
60
+ ),
61
+ InlineKeyboardButton(
62
+ "10",
63
+ callback_data="10"
64
+ ),
65
+ InlineKeyboardButton(
66
+ "15",
67
+ callback_data="15"
68
+ )
69
+ ]
70
+ ]
71
+ )
72
+
73
+ limit_kb = InlineKeyboardMarkup(
74
+ [
75
+ [
76
+ InlineKeyboardButton(
77
+ "5",
78
+ callback_data="l_5"
79
+ ),
80
+ InlineKeyboardButton(
81
+ "10",
82
+ callback_data="l_10"
83
+ ),
84
+ InlineKeyboardButton(
85
+ "15",
86
+ callback_data="l_15"
87
+ )
88
+ ]
89
+ ]
90
+ )
91
+
92
+ @Gojo.on_message(command(['floodaction','actionflood']))
93
+ async def flood_action(c: Gojo, m: Message):
94
+ if m.chat.type == CT.PRIVATE:
95
+ await m.reply_text("Use this command in group")
96
+ return
97
+ c_id = m.chat.id
98
+ is_flood = Flood.is_chat(c_id)
99
+ saction = is_flood[2]
100
+ if is_flood:
101
+ await m.reply_text(
102
+ f"Choose a action given bellow to do when flood happens.\n **CURRENT ACTION** is {saction}",
103
+ reply_markup=action_kb
104
+ )
105
+ return
106
+ await m.reply_text("Switch on the flood protection first.")
107
+ return
108
+
109
+ @Gojo.on_message(command(['setflood', 'flood']) & ~filters.bot & admin_filter)
110
+ async def flood_set(c: Gojo, m: Message):
111
+ if m.chat.type == CT.PRIVATE:
112
+ return await m.reply_text("This command is ment to be used in groups.")
113
+ split = m.text.split(None, 1)
114
+ c_id = m.chat.id
115
+ is_flood = Flood.is_chat(c_id)
116
+ if len(split) == 1:
117
+ c_id = m.chat.id
118
+ if is_flood:
119
+ saction = is_flood[2]
120
+ slimit = is_flood[0]
121
+ swithin = is_flood[1]
122
+ return await m.reply_text(f"Flood is on for this chat\n**Action**:{saction}\n**Messages**:{slimit} within {swithin} sec")
123
+ return await m.reply_text("Flood protection is off of this chat.")
124
+
125
+ if len(split) == 2:
126
+ c_id = m.chat.id
127
+ if split[1].lower() in on_key:
128
+ Flood.save_flood(m.chat.id, 5, 5, 'mute')
129
+ await m.reply_text("Flood protection has been started for this group.")
130
+ return
131
+ if split[1].lower() in off_key:
132
+ Flood.rm_flood(m.chat.id, slimit, swithin, saction)
133
+ await m.reply_text("Flood protection has been stopped for this chat")
134
+ return
135
+ await m.reply_text("**Usage:**\n `/setflood on/off`")
136
+ return
137
+
138
+ @Gojo.on_callback_query()
139
+ async def callbacks(c: Gojo, q: CallbackQuery):
140
+ data = q.data
141
+ if data == "close":
142
+ await q.message.delete()
143
+ q.answer("Closed")
144
+ return
145
+ c_id = q.message.chat.id
146
+ is_flood = Flood.is_chat(c_id)
147
+ saction = is_flood[2]
148
+ slimit = is_flood[0]
149
+ swithin = is_flood[1]
150
+ user = q.from_user.id
151
+ user_status = (await q.message.chat.get_member(q.from_user.id)).status
152
+ if user in SUPPORT_STAFF or user_status in [CMS.OWNER, CMS.ADMINISTRATOR]:
153
+ if data in ["mute", "ban", "kick"]:
154
+ Flood.save_flood(c_id, slimit, swithin, data)
155
+ await q.answer("Updated action", show_alert=True)
156
+ q.edit_message_caption(
157
+ f"Set the limit of message after the flood protection will be activated\n **CURRENT LIMIT** {slimit} messages",
158
+ reply_markup=limit_kb
159
+ )
160
+ return
161
+ if data in ["l_5", "l_10", "l_15"]:
162
+ change = int(data.split("_")[1])
163
+ Flood.save_flood(c_id, change, swithin, saction)
164
+ await q.answer("Updated limit", show_alert=True)
165
+ q.edit_message_caption(
166
+ f"Set the time with the number of message recived treated as flood\n **CUURENT TIME** {swithin}",
167
+ reply_markup=within_kb
168
+ )
169
+ return
170
+ if data in ["5", "10", "15"]:
171
+ change = int(data)
172
+ Flood.save_flood(c_id, slimit, change, saction)
173
+ await q.answer("Updated", show_alert=True)
174
+ q.edit_message_caption(
175
+ "Flood protection setting has been updated",
176
+ reply_markup=close_kb
177
+ )
178
+ return
179
+ else:
180
+ await q.answer(
181
+ "You don't have enough permission to do this!\nStay in your limits!",
182
+ show_alert=True,
183
+ )
184
+
185
+ @Gojo.on_callback_query(filters.regex("^un_"))
186
+ async def reverse_callbacks(c: Gojo, q: CallbackQuery):
187
+ data = q.data.split("_")
188
+ action = data[1]
189
+ user_id = int(data[2])
190
+ if action == "ban":
191
+ user = await q.message.chat.get_member(q.from_user.id)
192
+ if not user.privileges.can_restrict_members and q.from_user.id in SUPPORT_STAFF:
193
+ await q.answer(
194
+ "You don't have enough permission to do this!\nStay in your limits!",
195
+ show_alert=True,
196
+ )
197
+ return
198
+ whoo = await c.get_chat(user_id)
199
+ doneto = whoo.first_name if whoo.first_name else whoo.title
200
+ try:
201
+ await q.message.chat.unban_member(user_id)
202
+ except RPCError as e:
203
+ await q.message.edit_text(f"Error: {e}")
204
+ return
205
+ await q.message.edit_text(f"{q.from_user.mention} unbanned {doneto}!")
206
+ return
207
+
208
+ if action == "mute":
209
+ user = await q.message.chat.get_member(q.from_user.id)
210
+
211
+ if not user.privileges.can_restrict_members and user.id in SUPPORT_STAFF:
212
+ await q.answer(
213
+ "You don't have enough permission to do this!\nStay in your limits!",
214
+ show_alert=True,
215
+ )
216
+ return
217
+ whoo = await c.get_users(user_id)
218
+ try:
219
+ await q.message.chat.unban_member(user_id)
220
+ except RPCError as e:
221
+ await q.message.edit_text(f"Error: {e}")
222
+ return
223
+ await q.message.edit_text(f"{q.from_user.mention} unmuted {whoo.mention}!")
224
+ return
225
+
226
+ @Gojo.on_message(filters.all & ~filters.bot, ~filters.private, 10)
227
+ async def flood_watcher(c: Gojo, m: Message):
228
+ c_id = m.chat.id
229
+ u_id = m.from_user.id
230
+ is_flood = Flood.is_chat(c_id)
231
+ app_users = Approve(m.chat.id).list_approved()
232
+ if u_id in {i[0] for i in app_users}:
233
+ return #return if the user is approved
234
+ if not is_flood or u_id in SUPPORT_STAFF:
235
+ return #return if the user is in support_staff
236
+ user_status = (await m.chat.get_member(m.from_user.id)).status
237
+ if user_status in [CMS.OWNER, CMS.ADMINISTRATOR]:
238
+ return #return if the user is owner or admin
239
+ action = is_flood[2]
240
+ limit = int(is_flood[0])
241
+ within = int(is_flood[1])
242
+ dic = {}
243
+ for i in str(dic.keys()):
244
+ if str(c_id) != i:
245
+ z = {c_id : set()}
246
+ dic.update(z)
247
+ dic[c_id].add(u_id)
Powers/plugins/muting.py CHANGED
@@ -597,7 +597,7 @@ async def unmutebutton(c: Gojo, q: CallbackQuery):
597
  user_id = int(splitter[1])
598
  user = await q.message.chat.get_member(q.from_user.id)
599
 
600
- if not user.can_restrict_members and user.id != OWNER_ID:
601
  await q.answer(
602
  "You don't have enough permission to do this!\nStay in your limits!",
603
  show_alert=True,
 
597
  user_id = int(splitter[1])
598
  user = await q.message.chat.get_member(q.from_user.id)
599
 
600
+ if not user.privileges.can_restrict_members and user.id != OWNER_ID:
601
  await q.answer(
602
  "You don't have enough permission to do this!\nStay in your limits!",
603
  show_alert=True,
Powers/plugins/search.py ADDED
@@ -0,0 +1,248 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from traceback import format_exc
2
+
3
+ from pyrogram.types import Message
4
+ from search_engine_parser.core.engines.google import Search as GoogleSearch
5
+ from search_engine_parser.core.engines.myanimelist import Search as AnimeSearch
6
+ from search_engine_parser.core.engines.stackoverflow import \
7
+ Search as StackSearch
8
+ from search_engine_parser.core.exceptions import (NoResultsFound,
9
+ NoResultsOrTrafficError)
10
+
11
+ from Powers import LOGGER, SUPPORT_CHANNEL
12
+ from Powers.bot_class import Gojo
13
+ from Powers.utils.custom_filters import command
14
+ from Powers.utils.kbhelpers import ikb
15
+
16
+ #have to add youtube
17
+
18
+ gsearch = GoogleSearch()
19
+ anisearch = AnimeSearch()
20
+ stsearch = StackSearch()
21
+
22
+ @Gojo.on_message(command('google'))
23
+ async def g_search(c: Gojo, m: Message):
24
+ split = m.text.split(None, 1)
25
+ if len(split) == 1:
26
+ return await m.reply_text("No query given\nDo `/help search` to see how to use it")
27
+ to_del = await m.reply_text("Searching google...")
28
+ query = split[1]
29
+ try:
30
+ result = await gsearch.async_search(query)
31
+ keyboard = ikb(
32
+ [
33
+ [
34
+ (
35
+ f"{result[0]['titles']}",
36
+ f"{result[0]['links']}",
37
+ "url",
38
+ ),
39
+ ],
40
+ [
41
+ (
42
+ f"{result[1]['titles']}",
43
+ f"{result[1]['links']}",
44
+ "url",
45
+ ),
46
+ ],
47
+ [
48
+ (
49
+ f"{result[2]['titles']}",
50
+ f"{result[2]['links']}",
51
+ "url",
52
+ ),
53
+ ],
54
+ [
55
+ (
56
+ f"{result[3]['titles']}",
57
+ f"{result[3]['links']}",
58
+ "url",
59
+ ),
60
+ ],
61
+ [
62
+ (
63
+ f"{result[4]['titles']}",
64
+ f"{result[4]['links']}",
65
+ "url",
66
+ ),
67
+ ],
68
+ ]
69
+ )
70
+
71
+ txt = f"Here are the results of requested query **{query.upper()}**"
72
+ await to_del.delete()
73
+ await m.reply_text(txt, reply_markup=keyboard)
74
+ return
75
+ except NoResultsFound:
76
+ await to_del.delete()
77
+ await m.reply_text("No result found corresponding to your query")
78
+ return
79
+ except NoResultsOrTrafficError:
80
+ await to_del.delete()
81
+ await m.reply_text("No result found due to too many traffic")
82
+ return
83
+ except Exception as e:
84
+ await to_del.delete()
85
+ await m.reply_text(f"Got an error:\nReport it at @{SUPPORT_CHANNEL}")
86
+ LOGGER.error(e)
87
+ LOGGER.error(format_exc())
88
+ return
89
+
90
+
91
+ @Gojo.on_message(command('anime'))
92
+ async def anime_search(c: Gojo, m: Message):
93
+ split = m.text.split(None, 1)
94
+ if len(split) == 1:
95
+ return await m.reply_text("No query given\nDo `/help search` to see how to use it")
96
+ to_del = await m.reply_text("Searching myanimelist...")
97
+ query = split[1]
98
+ try:
99
+ result = await anisearch.async_search(query)
100
+ keyboard = ikb(
101
+ [
102
+ [
103
+ (
104
+ f"{result[0]['titles']}",
105
+ f"{result[0]['links']}",
106
+ "url",
107
+ ),
108
+ ],
109
+ [
110
+ (
111
+ f"{result[1]['titles']}",
112
+ f"{result[1]['links']}",
113
+ "url",
114
+ ),
115
+ ],
116
+ [
117
+ (
118
+ f"{result[2]['titles']}",
119
+ f"{result[2]['links']}",
120
+ "url",
121
+ ),
122
+ ],
123
+ [
124
+ (
125
+ f"{result[3]['titles']}",
126
+ f"{result[3]['links']}",
127
+ "url",
128
+ ),
129
+ ],
130
+ [
131
+ (
132
+ f"{result[4]['titles']}",
133
+ f"{result[4]['links']}",
134
+ "url",
135
+ ),
136
+ ],
137
+ ]
138
+ )
139
+
140
+ txt = f"Here are the results of requested query **{query.upper()}**"
141
+ await to_del.delete()
142
+ await m.reply_text(txt, reply_markup=keyboard)
143
+ return
144
+ except NoResultsFound:
145
+ await to_del.delete()
146
+ await m.reply_text("No result found corresponding to your query")
147
+ return
148
+ except NoResultsOrTrafficError:
149
+ await to_del.delete()
150
+ await m.reply_text("No result found due to too many traffic")
151
+ return
152
+ except Exception as e:
153
+ await to_del.delete()
154
+ await m.reply_text(f"Got an error:\nReport it at @{SUPPORT_CHANNEL}")
155
+ LOGGER.error(e)
156
+ LOGGER.error(format_exc())
157
+ return
158
+
159
+ @Gojo.on_message(command('anime'))
160
+ async def stack_search(c: Gojo, m: Message):
161
+ split = m.text.split(None, 1)
162
+ if len(split) == 1:
163
+ return await m.reply_text("No query given\nDo `/help search` to see how to use it")
164
+ to_del = await m.reply_text("Searching Stackoverflow...")
165
+ query = split[1]
166
+ try:
167
+ result = await stsearch.async_search(query)
168
+ keyboard = ikb(
169
+ [
170
+ [
171
+ (
172
+ f"{result[0]['titles']}",
173
+ f"{result[0]['links']}",
174
+ "url",
175
+ ),
176
+ ],
177
+ [
178
+ (
179
+ f"{result[1]['titles']}",
180
+ f"{result[1]['links']}",
181
+ "url",
182
+ ),
183
+ ],
184
+ [
185
+ (
186
+ f"{result[2]['titles']}",
187
+ f"{result[2]['links']}",
188
+ "url",
189
+ ),
190
+ ],
191
+ [
192
+ (
193
+ f"{result[3]['titles']}",
194
+ f"{result[3]['links']}",
195
+ "url",
196
+ ),
197
+ ],
198
+ [
199
+ (
200
+ f"{result[4]['titles']}",
201
+ f"{result[4]['links']}",
202
+ "url",
203
+ ),
204
+ ],
205
+ ]
206
+ )
207
+
208
+ txt = f"Here are the results of requested query **{query.upper()}**"
209
+ await to_del.delete()
210
+ await m.reply_text(txt, reply_markup=keyboard)
211
+ return
212
+ except NoResultsFound:
213
+ await to_del.delete()
214
+ await m.reply_text("No result found corresponding to your query")
215
+ return
216
+ except NoResultsOrTrafficError:
217
+ await to_del.delete()
218
+ await m.reply_text("No result found due to too many traffic")
219
+ return
220
+ except Exception as e:
221
+ await to_del.delete()
222
+ await m.reply_text(f"Got an error:\nReport it at @{SUPPORT_CHANNEL}")
223
+ LOGGER.error(e)
224
+ LOGGER.error(format_exc())
225
+ return
226
+
227
+
228
+ __PLUGIN__ = "search"
229
+
230
+
231
+ __alt_name__ = [
232
+ "google",
233
+ "anime",
234
+ "stack",
235
+ ]
236
+
237
+ __HELP__ = """
238
+ **Search**
239
+
240
+ **Admin only:**
241
+ • /google `<query>` : Search the google for the given query.
242
+ • /anime `<query>` : Search myanimelist for the given query.
243
+ • /stack `<query>` : Search stackoverflow for the given query.
244
+
245
+
246
+ **Example:**
247
+ `/google pyrogram`: return top 5 reuslts.
248
+ """
Powers/utils/custom_filters.py CHANGED
@@ -222,7 +222,7 @@ async def restrict_check_func(_, __, m: Message or CallbackQuery):
222
 
223
  user = await m.chat.get_member(m.from_user.id)
224
 
225
- if user.can_restrict_members or user.status == CMS.OWNER:
226
  status = True
227
  else:
228
  status = False
 
222
 
223
  user = await m.chat.get_member(m.from_user.id)
224
 
225
+ if user.privileges.can_restrict_members or user.status == CMS.OWNER:
226
  status = True
227
  else:
228
  status = False
Powers/utils/extras.py CHANGED
@@ -672,4 +672,16 @@ StartPic = [
672
  "https://te.legra.ph/file/c10f1b32adaf93c1a9fe1.jpg",
673
  "https://te.legra.ph/file/68c607517cca7d08e8910.jpg",
674
  "https://te.legra.ph/file/c86855e6d5a5668748ce1.jpg",
 
 
 
 
 
 
 
 
 
 
 
 
675
  ]
 
672
  "https://te.legra.ph/file/c10f1b32adaf93c1a9fe1.jpg",
673
  "https://te.legra.ph/file/68c607517cca7d08e8910.jpg",
674
  "https://te.legra.ph/file/c86855e6d5a5668748ce1.jpg",
675
+ "https://te.legra.ph/file/e999d233a4a29a7ccc7fa.jpg",
676
+ "https://te.legra.ph/file/2baf1c80ee22ffe1d73fb.jpg",
677
+ "https://te.legra.ph/file/29133374260bf9e7786ee.jpg",
678
+ "https://te.legra.ph/file/0a57ea903409439fadd6a.jpg",
679
+ "https://te.legra.ph/file/326618accb5f9ab6d2e18.jpg",
680
+ "https://te.legra.ph/file/2a899cfc97a46bfd2feae.jpg",
681
+ "https://te.legra.ph/file/f0cd5bcebcd547a507dbf.jpg",
682
+ "https://te.legra.ph/file/8bcb57e91776e3ed63b60.jpg",
683
+ "https://te.legra.ph/file/3c569e93c426aa1941ea6.jpg",
684
+ "https://te.legra.ph/file/1751252a9f0483811e9b9.jpg",
685
+ "https://te.legra.ph/file/380b862e0248225cc1a45.jpg",
686
+ "https://te.legra.ph/file/f314f89640ce4b4118e9e.jpg",
687
  ]
README.md CHANGED
@@ -60,7 +60,7 @@ The Gojo Satoru is a powerful Group Management bot with awesome plugins and feat
60
  * Fully open-source
61
  * Frequently updated
62
 
63
- ***Can be found on Telegram as __[@iamgojoof6eyes_bot](https://telegram.dog/iamgojoof6eyes_bot)__***
64
 
65
  * Feel free to give ideas for next update. Drop your ideas [here](https://github.com/Gojo-Bots/Gojo_Satoru/discussions/new?category=ideas)
66
 
 
60
  * Fully open-source
61
  * Frequently updated
62
 
63
+ ***Can be found on Telegram as __[@GojoSuperbot](https://telegram.dog/GojoSuperbot)__***
64
 
65
  * Feel free to give ideas for next update. Drop your ideas [here](https://github.com/Gojo-Bots/Gojo_Satoru/discussions/new?category=ideas)
66
 
app.json CHANGED
@@ -11,7 +11,7 @@
11
  "Anime"
12
  ],
13
  "repository": "https://github.com/Gojo-Bots/Gojo_Satoru",
14
- "success_url": "https://t.me/iamgojoof6eyes_bot",
15
  "env": {
16
  "BOT_TOKEN": {
17
  "description": "Your telegram bot token, get from @Botfather in telegram.",
 
11
  "Anime"
12
  ],
13
  "repository": "https://github.com/Gojo-Bots/Gojo_Satoru",
14
+ "success_url": "https://t.me/GojoSuperbot",
15
  "env": {
16
  "BOT_TOKEN": {
17
  "description": "Your telegram bot token, get from @Botfather in telegram.",