Captain Ezio commited on
Commit
c330dc1
·
1 Parent(s): 6babc85

fixed bugs

Browse files
Powers/plugins/flood.py CHANGED
@@ -329,7 +329,10 @@ dic = {}
329
  async def flood_watcher(c: Gojo, m: Message):
330
  c_id = m.chat.id
331
  Flood = Floods()
332
- u_id = m.from_user.id
 
 
 
333
  is_flood = Flood.is_chat(c_id)
334
  if not is_flood:
335
  return # return of chat is not in anti flood protection
 
329
  async def flood_watcher(c: Gojo, m: Message):
330
  c_id = m.chat.id
331
  Flood = Floods()
332
+ try:
333
+ u_id = m.from_user.id
334
+ except AttributeError:
335
+ return # Get this error when the message received is not by an user and return
336
  is_flood = Flood.is_chat(c_id)
337
  if not is_flood:
338
  return # return of chat is not in anti flood protection
Powers/plugins/formatting.py CHANGED
@@ -1,3 +1,5 @@
 
 
1
  from pyrogram import enums, filters
2
  from pyrogram.errors import MediaCaptionTooLong
3
  from pyrogram.types import CallbackQuery, Message
@@ -5,6 +7,7 @@ from pyrogram.types import CallbackQuery, Message
5
  from Powers import LOGGER
6
  from Powers.bot_class import Gojo
7
  from Powers.utils.custom_filters import command
 
8
  from Powers.utils.kbhelpers import ikb
9
 
10
 
@@ -26,8 +29,9 @@ async def gen_formatting_kb(m):
26
  command(["markdownhelp", "formatting"]) & filters.private,
27
  )
28
  async def markdownhelp(_, m: Message):
29
- await m.reply_text(
30
- text=f"plugins.{__PLUGIN__}.help",
 
31
  quote=True,
32
  reply_markup=(await gen_formatting_kb(m)),
33
  )
@@ -43,28 +47,28 @@ async def get_formatting_info(c: Gojo, q: CallbackQuery):
43
  if cmd == "md_formatting":
44
 
45
  txt = """<b>Markdown Formatting</b>
46
- You can format your message using <b>bold</b>, <i>italic</i>, <u>underline</u>, <strike>strike</strike> and much more. Go ahead and experiment!
47
-
48
- **Note**: It supports telegram user based formatting as well as html and markdown formattings.
49
- <b>Supported markdown</b>:
50
- - <code>`code words`</code>: Backticks are used for monospace fonts. Shows as: <code>code words</code>.
51
- - <code>__italic__</code>: Underscores are used for italic fonts. Shows as: <i>italic words</i>.
52
- - <code>**bold**</code>: Asterisks are used for bold fonts. Shows as: <b>bold words</b>.
53
- - <code>```pre```</code>: To make the formatter ignore other formatting characters inside the text formatted with '```', like: <code>**bold** | *bold*</code>.
54
- - <code>--underline--</code>: To make text <u>underline</u>.
55
- - <code>~~strike~~</code>: Tildes are used for strikethrough. Shows as: <strike>strike</strike>.
56
- - <code>||spoiler||</code>: Double vertical bars are used for spoilers. Shows as: <spoiler>Spoiler</spoiler>.
57
- - <code>[hyperlink](example.com)</code>: This is the formatting used for hyperlinks. Shows as: <a href="https://example.com/">hyperlink</a>.
58
- - <code>[My Button](buttonurl://example.com)</code>: This is the formatting used for creating buttons. This example will create a button named "My button" which opens <code>example.com</code> when clicked.
59
- If you would like to send buttons on the same row, use the <code>:same</code> formatting.
60
- <b>Example:</b>
61
- <code>[button 1](buttonurl:example.com)</code>
62
- <code>[button 2](buttonurl://example.com:same)</code>
63
- <code>[button 3](buttonurl://example.com)</code>
64
- This will show button 1 and 2 on the same line, while 3 will be underneath."""
65
  try:
66
- await q.message.edit_text(
67
- text=txt,
68
  reply_markup=kb,
69
  parse_mode=enums.ParseMode.HTML,
70
  )
@@ -74,46 +78,46 @@ async def get_formatting_info(c: Gojo, q: CallbackQuery):
74
  text=txt,
75
  parse_mode=enums.ParseMode.HTML,)
76
  elif cmd == "fillings":
77
- await q.message.edit_text(
78
- text="""<b>Fillings</b>
79
-
80
- You can also customise the contents of your message with contextual data. For example, you could mention a user by name in the welcome message, or mention them in a filter!
81
- You can use these to mention a user in notes too!
82
-
83
- <b>Supported fillings:</b>
84
- - <code>{first}</code>: The user's first name.
85
- - <code>{last}</code>: The user's last name.
86
- - <code>{fullname}</code>: The user's full name.
87
- - <code>{username}</code>: The user's username. If they don't have one, mentions the user instead.
88
- - <code>{mention}</code>: Mentions the user with their firstname.
89
- - <code>{id}</code>: The user's ID.
90
- - <code>{chatname}</code>: The chat's name.""",
91
  reply_markup=kb,
92
  parse_mode=enums.ParseMode.HTML,
93
  )
94
  elif cmd == "random_content":
95
- await q.message.edit_text(
96
- text="""<b>Random Content</b>
97
-
98
- Another thing that can be fun, is to randomise the contents of a message. Make things a little more personal by changing welcome messages, or changing notes!
99
-
100
- How to use random contents:
101
- - %%%: This separator can be used to add "random" replies to the bot.
102
- For example:
103
- <code>hello
104
- %%%
105
- how are you</code>
106
- This will randomly choose between sending the first message, "hello", or the second message, "how are you".
107
- Use this to make Gojo feel a bit more customised! (only works in filters/notes)
108
-
109
- Example welcome message::
110
- - Every time a new user joins, they'll be presented with one of the three messages shown here.
111
- -> /filter "hey"
112
- hello there <code>{first}</code>!
113
- %%%
114
- Ooooh, <code>{first}</code> how are you?
115
- %%%
116
- Sup? <code>{first}</code>""",
117
  reply_markup=kb,
118
  parse_mode=enums.ParseMode.HTML,
119
  )
@@ -124,10 +128,10 @@ async def get_formatting_info(c: Gojo, q: CallbackQuery):
124
 
125
  @Gojo.on_callback_query(filters.regex("^back."))
126
  async def send_mod_help(_, q: CallbackQuery):
127
- await q.message.edit_text(
128
- text="""Formatting
129
 
130
- Gojo supports a large number of formatting options to make your messages more expressive. Take a look by clicking the buttons below!""",
131
  reply_markup=(await gen_formatting_kb(q.message)),
132
  )
133
  await q.answer()
 
1
+ from random import choice
2
+
3
  from pyrogram import enums, filters
4
  from pyrogram.errors import MediaCaptionTooLong
5
  from pyrogram.types import CallbackQuery, Message
 
7
  from Powers import LOGGER
8
  from Powers.bot_class import Gojo
9
  from Powers.utils.custom_filters import command
10
+ from Powers.utils.extras import StartPic
11
  from Powers.utils.kbhelpers import ikb
12
 
13
 
 
29
  command(["markdownhelp", "formatting"]) & filters.private,
30
  )
31
  async def markdownhelp(_, m: Message):
32
+ await m.reply_photo(
33
+ photo=str(choice(StartPic)),
34
+ caption=f"{__HELP__}",
35
  quote=True,
36
  reply_markup=(await gen_formatting_kb(m)),
37
  )
 
47
  if cmd == "md_formatting":
48
 
49
  txt = """<b>Markdown Formatting</b>
50
+ You can format your message using <b>bold</b>, <i>italic</i>, <u>underline</u>, <strike>strike</strike> and much more. Go ahead and experiment!
51
+
52
+ **Note**: It supports telegram user based formatting as well as html and markdown formattings.
53
+ <b>Supported markdown</b>:
54
+ - <code>`code words`</code>: Backticks are used for monospace fonts. Shows as: <code>code words</code>.
55
+ - <code>__italic__</code>: Underscores are used for italic fonts. Shows as: <i>italic words</i>.
56
+ - <code>**bold**</code>: Asterisks are used for bold fonts. Shows as: <b>bold words</b>.
57
+ - <code>```pre```</code>: To make the formatter ignore other formatting characters inside the text formatted with '```', like: <code>**bold** | *bold*</code>.
58
+ - <code>--underline--</code>: To make text <u>underline</u>.
59
+ - <code>~~strike~~</code>: Tildes are used for strikethrough. Shows as: <strike>strike</strike>.
60
+ - <code>||spoiler||</code>: Double vertical bars are used for spoilers. Shows as: <spoiler>Spoiler</spoiler>.
61
+ - <code>[hyperlink](example.com)</code>: This is the formatting used for hyperlinks. Shows as: <a href="https://example.com/">hyperlink</a>.
62
+ - <code>[My Button](buttonurl://example.com)</code>: This is the formatting used for creating buttons. This example will create a button named "My button" which opens <code>example.com</code> when clicked.
63
+ If you would like to send buttons on the same row, use the <code>:same</code> formatting.
64
+ <b>Example:</b>
65
+ <code>[button 1](buttonurl:example.com)</code>
66
+ <code>[button 2](buttonurl://example.com:same)</code>
67
+ <code>[button 3](buttonurl://example.com)</code>
68
+ This will show button 1 and 2 on the same line, while 3 will be underneath."""
69
  try:
70
+ await q.edit_message_caption(
71
+ caption=txt,
72
  reply_markup=kb,
73
  parse_mode=enums.ParseMode.HTML,
74
  )
 
78
  text=txt,
79
  parse_mode=enums.ParseMode.HTML,)
80
  elif cmd == "fillings":
81
+ await q.edit_message_caption(
82
+ caption="""<b>Fillings</b>
83
+
84
+ You can also customise the contents of your message with contextual data. For example, you could mention a user by name in the welcome message, or mention them in a filter!
85
+ You can use these to mention a user in notes too!
86
+
87
+ <b>Supported fillings:</b>
88
+ - <code>{first}</code>: The user's first name.
89
+ - <code>{last}</code>: The user's last name.
90
+ - <code>{fullname}</code>: The user's full name.
91
+ - <code>{username}</code>: The user's username. If they don't have one, mentions the user instead.
92
+ - <code>{mention}</code>: Mentions the user with their firstname.
93
+ - <code>{id}</code>: The user's ID.
94
+ - <code>{chatname}</code>: The chat's name.""",
95
  reply_markup=kb,
96
  parse_mode=enums.ParseMode.HTML,
97
  )
98
  elif cmd == "random_content":
99
+ await q.edit_message_caption(
100
+ caption="""<b>Random Content</b>
101
+
102
+ Another thing that can be fun, is to randomise the contents of a message. Make things a little more personal by changing welcome messages, or changing notes!
103
+
104
+ How to use random contents:
105
+ - %%%: This separator can be used to add "random" replies to the bot.
106
+ For example:
107
+ <code>hello
108
+ %%%
109
+ how are you</code>
110
+ This will randomly choose between sending the first message, "hello", or the second message, "how are you".
111
+ Use this to make Gojo feel a bit more customised! (only works in filters/notes)
112
+
113
+ Example welcome message::
114
+ - Every time a new user joins, they'll be presented with one of the three messages shown here.
115
+ -> /filter "hey"
116
+ hello there <code>{first}</code>!
117
+ %%%
118
+ Ooooh, <code>{first}</code> how are you?
119
+ %%%
120
+ Sup? <code>{first}</code>""",
121
  reply_markup=kb,
122
  parse_mode=enums.ParseMode.HTML,
123
  )
 
128
 
129
  @Gojo.on_callback_query(filters.regex("^back."))
130
  async def send_mod_help(_, q: CallbackQuery):
131
+ await q.edit_message_caption(
132
+ caption="""Formatting
133
 
134
+ Gojo supports a large number of formatting options to make your messages more expressive. Take a look by clicking the buttons below!""",
135
  reply_markup=(await gen_formatting_kb(q.message)),
136
  )
137
  await q.answer()
Powers/utils/start_utils.py CHANGED
@@ -139,6 +139,8 @@ async def get_private_note(c: Gojo, m: Message, help_option: str):
139
  teks, button = await parse_button(text)
140
  button = await build_keyboard(button)
141
  button = ikb(button) if button else None
 
 
142
  if button:
143
  try:
144
  await m.reply_text(
 
139
  teks, button = await parse_button(text)
140
  button = await build_keyboard(button)
141
  button = ikb(button) if button else None
142
+ if not teks:
143
+ teks = "Here is your note"
144
  if button:
145
  try:
146
  await m.reply_text(
Powers/utils/string.py CHANGED
@@ -1,6 +1,6 @@
 
1
  from html import escape
2
  from re import compile as compile_re
3
- from time import time
4
  from typing import List
5
 
6
  from pyrogram.enums import ChatType
@@ -19,13 +19,13 @@ async def extract_time(m: Message, time_val: str):
19
  if not time_num.isdigit():
20
  await m.reply("Unspecified amount of time.")
21
  return ""
22
-
23
  if unit == "m":
24
- bantime = int(time() + int(time_num) * 60)
25
  elif unit == "h":
26
- bantime = int(time() + int(time_num) * 60 * 60)
27
- elif unit == "s":
28
- bantime = int(time() + int(time_num) * 24 * 60 * 60)
29
  else:
30
  # how even...?
31
  return ""
@@ -62,7 +62,6 @@ async def parse_button(text: str):
62
  prev = match.start(1) - 1
63
  else:
64
  note_data += markdown_note[prev:]
65
-
66
  return note_data, buttons
67
 
68
 
 
1
+ from datetime import datetime, timedelta
2
  from html import escape
3
  from re import compile as compile_re
 
4
  from typing import List
5
 
6
  from pyrogram.enums import ChatType
 
19
  if not time_num.isdigit():
20
  await m.reply("Unspecified amount of time.")
21
  return ""
22
+ initial_time = datetime.now()
23
  if unit == "m":
24
+ bantime = initial_time + timedelta(minutes=int(time_num))
25
  elif unit == "h":
26
+ bantime = initial_time + timedelta(hours=int(time_num))
27
+ elif unit == "d":
28
+ bantime = initial_time + timedelta(days=int(time_num))
29
  else:
30
  # how even...?
31
  return ""
 
62
  prev = match.start(1) - 1
63
  else:
64
  note_data += markdown_note[prev:]
 
65
  return note_data, buttons
66
 
67