File size: 4,989 Bytes
98ab4e9
3580517
1b5719b
7956eb0
98ab4e9
1b5719b
 
d720c41
7956eb0
 
 
8ee0322
7956eb0
effac34
7956eb0
 
 
 
 
 
 
89c3556
7956eb0
 
 
 
3c9449b
7956eb0
 
 
 
 
8ee0322
7956eb0
 
 
 
 
 
89c3556
7956eb0
 
 
 
 
 
 
d720c41
 
d7e1221
d720c41
7956eb0
89c3556
d7e1221
7956eb0
 
d720c41
7956eb0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3c9449b
7956eb0
 
 
89c3556
7956eb0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
89c3556
7956eb0
 
89c3556
7956eb0
89c3556
7956eb0
 
 
b002286
 
 
7956eb0
 
89c3556
7956eb0
 
 
 
 
 
 
 
 
 
 
 
b002286
 
 
7956eb0
 
 
89c3556
7956eb0
 
 
 
 
 
 
 
 
 
89c3556
7956eb0
 
 
 
 
 
 
818d601
d76971a
809532c
d76971a
 
818d601
2707517
818d601
 
2707517
 
d720c41
 
 
 
 
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
from pyrogram import filters
from pyrogram.types import CallbackQuery, Message

from Powers.bot_class import Gojo
from Powers.database.rules_db import Rules
from Powers.utils.custom_filters import admin_filter, command
from Powers.utils.kbhelpers import ikb
from Powers.utils.string import build_keyboard, parse_button


@Gojo.on_message(command("rules") & filters.group)
async def get_rules(c: Gojo, m: Message):
    db = Rules(m.chat.id)
    msg_id = m.reply_to_message.id if m.reply_to_message else m.id

    rules = db.get_rules()
    if m and not m.from_user:
        return

    if not rules:
        await m.reply_text(
            text="The Admins for this group have not setup rules! That doesn't mean you can break the DECORUM of this group !",
            quote=True,
        )
        return

    if priv_rules_status := db.get_privrules():
        pm_kb = ikb(
            [
                [
                    (
                        "Rules",
                        f"https://t.me/{c.me.username}?start=rules_{m.chat.id}",
                        "url",
                    ),
                ],
            ],
        )
        await m.reply_text(
            text="Click on the below button to see this group rules!",
            quote=True,
            reply_markup=pm_kb,
            reply_to_message_id=msg_id,
        )
        return

    formated = rules
    teks, button = await parse_button(formated)
    button = await build_keyboard(button)
    button = ikb(button) if button else None
    textt = teks
    await m.reply_text(
        text=f"""The rules for <b>{m.chat.title} are:</b>
{textt}""",
        disable_web_page_preview=True,
        reply_to_message_id=msg_id,
        reply_markup=button
    )
    return


@Gojo.on_message(command("setrules") & admin_filter)
async def set_rules(_, m: Message):
    db = Rules(m.chat.id)
    if m and not m.from_user:
        return

    if m.reply_to_message and m.reply_to_message.text:
        rules = m.reply_to_message.text.markdown
    elif (not m.reply_to_message) and len(m.text.split()) >= 2:
        rules = m.text.split(None, 1)[1]
    else:
        return await m.reply_text("Provide some text to set as rules !!")

    if len(rules) > 4000:
        rules = rules[:3949]
        await m.reply_text("Rules are truncated to 3950 characters!")

    db.set_rules(rules)
    await m.reply_text(text="Successfully set rules for this group.")
    return


@Gojo.on_message(
    command(["pmrules", "privaterules"]) & admin_filter,
)
async def priv_rules(_, m: Message):
    db = Rules(m.chat.id)
    if m and not m.from_user:
        return

    if len(m.text.split()) == 2:
        option = (m.text.split())[1]
        if option in ("on", "yes"):
            db.set_privrules(True)
            msg = f"Private Rules have been turned <b>on</b> for chat <b>{m.chat.title}</b>"
        elif option in ("off", "no"):
            db.set_privrules(False)
            msg = f"Private Rules have been turned <b>off</b> for chat <b>{m.chat.title}</b>"
        else:
            msg = "Option not valid, choose from <code>on</code>, <code>yes</code>, <code>off</code>, <code>no</code>"
        await m.reply_text(msg)
    elif len(m.text.split()) == 1:
        curr_pref = db.get_privrules()
        msg = (
            f"Current Preference for Private rules in this chat is: <b>{curr_pref}</b>"
        )
        await m.reply_text(msg)
    else:
        await m.reply_text(text="Please check help on how to use this this command.")

    return


@Gojo.on_message(command("clearrules") & admin_filter)
async def clear_rules(_, m: Message):
    db = Rules(m.chat.id)
    if m and not m.from_user:
        return

    rules = db.get_rules()
    if not rules:
        await m.reply_text(
            text="The Admins for this group have not setup rules! That doesn't mean you can break the DECORUM of this group !"
        )
        return

    await m.reply_text(
        text="Are you sure you want to clear rules?",
        reply_markup=ikb(
            [[("⚠️ Confirm", "clear_rules"), ("❌ Cancel", "close_admin")]],
        ),
    )
    return


@Gojo.on_callback_query(filters.regex("^clear_rules$"))
async def clearrules_callback(_, q: CallbackQuery):
    Rules(q.message.chat.id).clear_rules()
    await q.message.edit_text(text="Successfully cleared rules for this group!")
    await q.answer("Rules for the chat have been cleared!", show_alert=True)
    return


__PLUGIN__ = "rules"

__alt_name__ = ["rule"]

__HELP__ = """
**Rules**

Set rules for you chat so that members know what to do and what not to do in your group!

• /rules: get the rules for current chat.

**Admin only:**
• /setrules `<rules>`: Set the rules for this chat, also works as a reply to a message.
• /clearrules: Clear the rules for this chat.
• /privrules `<on/yes/no/off>`: Turns on/off the option to send the rules to PM of user or group.

**Note Format**
    Check /markdownhelp for help related to formatting!
"""