Spaces:
Sleeping
Sleeping
from random import choice | |
from pyrogram import enums, filters | |
from pyrogram.errors import MediaCaptionTooLong | |
from pyrogram.types import CallbackQuery, Message | |
from Powers.bot_class import Gojo | |
from Powers.utils.custom_filters import command | |
from Powers.utils.extras import StartPic | |
from Powers.utils.kbhelpers import ikb | |
async def gen_formatting_kb(m): | |
return ikb( | |
[ | |
[ | |
("Markdown Formatting", "formatting.md_formatting"), | |
("Fillings", "formatting.fillings"), | |
], | |
[("Random Content", "formatting.random_content")], | |
], | |
True, | |
"commands" | |
) | |
async def markdownhelp(_, m: Message): | |
await m.reply_photo( | |
photo=str(choice(StartPic)), | |
caption=f"{__HELP__}", | |
quote=True, | |
reply_markup=(await gen_formatting_kb(m)), | |
) | |
return | |
md_txt = """<b>Markdown Formatting</b> | |
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! | |
**Note**: It supports telegram user based formatting as well as html and markdown formattings. | |
<b>Supported markdown</b>: | |
- <code>`code words`</code>: Backticks are used for monospace fonts. Shows as: <code>code words</code>. | |
- <code>__italic__</code>: Underscores are used for italic fonts. Shows as: <i>italic words</i>. | |
- <code>**bold**</code>: Asterisks are used for bold fonts. Shows as: <b>bold words</b>. | |
- <code>```pre```</code>: To make the formatter ignore other formatting characters inside the text formatted with '```', like: <code>**bold** | *bold*</code>. | |
- <code>--underline--</code>: To make text <u>underline</u>. | |
- <code>~~strike~~</code>: Tildes are used for strikethrough. Shows as: <strike>strike</strike>. | |
- <code>||spoiler||</code>: Double vertical bars are used for spoilers. Shows as: <spoiler>Spoiler</spoiler>. | |
- <code>[hyperlink](example.com)</code>: This is the formatting used for hyperlinks. Shows as: <a href="https://example.com/">hyperlink</a>. | |
- <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. | |
If you would like to send buttons on the same row, use the <code>:same</code> formatting. | |
<b>Example:</b> | |
<code>[button 1](buttonurl:example.com)</code> | |
<code>[button 2](buttonurl://example.com:same)</code> | |
<code>[button 3](buttonurl://example.com)</code> | |
This will show button 1 and 2 on the same line, while 3 will be underneath.""" | |
async def get_splited_formatting(msg, page=1): | |
msg = msg.split("\n") | |
l = len(msg) | |
new_msg = "" | |
total = l // 10 | |
first = 10 * (page - 1) | |
last = 10 * page | |
if not first: | |
for i in msg[first:last]: | |
new_msg += f"{i}\n" | |
kb = [ | |
[ | |
("Next page ▶️", f"next_format_{page + 1}") | |
] | |
] | |
else: | |
first += 1 | |
if page == total: | |
for i in msg[first:]: | |
new_msg += f"{i}\n" | |
kb = [ | |
[ | |
("◀️ Previous page", f"next_format_{page - 1}") | |
] | |
] | |
else: | |
for i in msg[first:last]: | |
new_msg += f"{i}\n" | |
kb = [ | |
[ | |
("◀️ Previous page", f"next_format_{page - 1}"), | |
("Next page ▶️", f"next_format_{page + 1}") | |
] | |
] | |
kb = ikb(kb, True, "back.formatting") | |
return new_msg, kb | |
async def change_formatting_page(c: Gojo, q: CallbackQuery): | |
page = q.data.split("_")[-1] | |
txt, kb = await get_splited_formatting(md_txt, int(page)) | |
await q.edit_message_caption(txt, reply_markup=kb, parse_mode=enums.ParseMode.HTML, ) | |
return | |
async def get_formatting_info(c: Gojo, q: CallbackQuery): | |
cmd = q.data.split(".")[1] | |
kb = ikb([[("Back", "back.formatting")]]) | |
if cmd == "md_formatting": | |
try: | |
await q.edit_message_caption( | |
caption=md_txt, | |
reply_markup=kb, | |
parse_mode=enums.ParseMode.HTML, | |
) | |
except MediaCaptionTooLong: | |
txt, kb = await get_splited_formatting(md_txt) | |
await q.edit_message_caption( | |
caption=txt, | |
reply_markup=kb, | |
parse_mode=enums.ParseMode.HTML, | |
) | |
elif cmd == "fillings": | |
await q.edit_message_caption( | |
caption="""<b>Fillings</b> | |
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! | |
You can use these to mention a user in notes too! | |
<b>Supported fillings:</b> | |
- <code>{first}</code>: The user's first name. | |
- <code>{last}</code>: The user's last name. | |
- <code>{fullname}</code>: The user's full name. | |
- <code>{username}</code>: The user's username. If they don't have one, mentions the user instead. | |
- <code>{mention}</code>: Mentions the user with their firstname. | |
- <code>{id}</code>: The user's ID. | |
- <code>{chatname}</code>: The chat's name.""", | |
reply_markup=kb, | |
parse_mode=enums.ParseMode.HTML, | |
) | |
elif cmd == "random_content": | |
await q.edit_message_caption( | |
caption="""<b>Random Content</b> | |
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! | |
How to use random contents: | |
- %%%: This separator can be used to add "random" replies to the bot. | |
For example: | |
<code>hello | |
%%% | |
how are you</code> | |
This will randomly choose between sending the first message, "hello", or the second message, "how are you". | |
Use this to make Gojo feel a bit more customised! (only works in filters/notes) | |
Example welcome message:: | |
- Every time a new user joins, they'll be presented with one of the three messages shown here. | |
-> /filter "hey" | |
hello there <code>{first}</code>! | |
%%% | |
Ooooh, <code>{first}</code> how are you? | |
%%% | |
Sup? <code>{first}</code>""", | |
reply_markup=kb, | |
parse_mode=enums.ParseMode.HTML, | |
) | |
await q.answer() | |
return | |
async def send_mod_help(_, q: CallbackQuery): | |
await q.edit_message_caption( | |
caption="""Formatting | |
Gojo supports a large number of formatting options to make your messages more expressive. Take a look by clicking the buttons below!""", | |
reply_markup=(await gen_formatting_kb(q.message)), | |
) | |
await q.answer() | |
return | |
__PLUGIN__ = "formatting" | |
__alt_name__ = ["formatting", "markdownhelp", "markdown"] | |
__buttons__ = [ | |
[ | |
("Markdown Formatting", "formatting.md_formatting"), | |
("Fillings", "formatting.fillings"), | |
], | |
[("Random Content", "formatting.random_content")], | |
] | |
__HELP__ = """ | |
**Formatting** | |
Gojo supports a large number of formatting options to make your messages more expressive. Take a look by clicking the buttons below!""" | |