File size: 7,318 Bytes
c330dc1
 
11ae35a
ace1179
11ae35a
 
9db4ada
87abec5
c330dc1
11ae35a
f0f9ad9
ca4eb6d
 
 
 
 
 
 
 
 
 
11ae35a
 
ca4eb6d
 
 
 
 
 
 
c330dc1
 
 
ca4eb6d
 
 
 
 
 
c26bbaf
c330dc1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c26bbaf
6cef7ec
c26bbaf
 
 
 
 
 
 
 
 
 
 
 
6cef7ec
c26bbaf
 
 
 
 
 
 
 
 
6cef7ec
c26bbaf
 
 
 
 
 
6cef7ec
 
 
c26bbaf
6cef7ec
c26bbaf
 
 
 
 
6cef7ec
c26bbaf
 
 
 
6cef7ec
c26bbaf
 
6cef7ec
c26bbaf
 
 
 
 
 
6cef7ec
ace1179
c330dc1
c26bbaf
ace1179
 
 
 
c26bbaf
 
 
 
51e1c40
c26bbaf
ca4eb6d
c330dc1
 
 
 
 
 
 
 
 
 
 
 
 
 
ca4eb6d
5ec9c41
ca4eb6d
 
c330dc1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ca4eb6d
5ec9c41
ca4eb6d
 
 
 
 
 
 
 
c330dc1
 
11170eb
c330dc1
ca4eb6d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9da6fea
709df35
096ee5f
9da6fea
af1662b
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
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"
    )


@Gojo.on_message(
    command(["markdownhelp", "formatting"]) & filters.private,
)
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


@Gojo.on_callback_query(filters.regex(r"^next_format_.*[0-9]$"))
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


@Gojo.on_callback_query(filters.regex("^formatting."))
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


@Gojo.on_callback_query(filters.regex("^back."))
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!"""