Captain Ezio
Looks good
2aca525
raw
history blame
16.1 kB
from html import escape
from secrets import choice
from Powers import DEV_USERS
from Powers.vars import Config
from Powers.bot_class import Gojo
from pyrogram import enums, filters
from Powers.utils.chat_type import chattype
from Powers.database.antispam_db import GBan
from Powers.database.greetings_db import Greetings
from Powers.utils.msg_types import Types, get_wlcm_type
from pyrogram.errors import RPCError, ChatAdminRequired
from Powers.utils.parser import mention_html, escape_markdown
from pyrogram.types import Message, ChatMemberUpdated, InlineKeyboardMarkup
from Powers.utils.custom_filters import command, admin_filter, bot_admin_filter
from Powers.utils.string import (
parse_button, build_keyboard, escape_invalid_curly_brackets)
# Initialize
gdb = GBan()
async def escape_mentions_using_curly_brackets_wl(
m: ChatMemberUpdated,
n: bool,
text: str,
parse_words: list,
) -> str:
teks = await escape_invalid_curly_brackets(text, parse_words)
if n:
user = m.new_chat_member.user if m.new_chat_member else m.from_user
else:
user = m.old_chat_member.user if m.old_chat_member else m.from_user
if teks:
chat_type = await chattype(m)
teks = teks.format(
first=escape(user.first_name),
last=escape(user.last_name or user.first_name),
fullname=" ".join(
[
escape(user.first_name),
escape(user.last_name),
]
if user.last_name
else [escape(user.first_name)],
),
username=(
"@" + (await escape_markdown(escape(user.username)))
if user.username
else (await (mention_html(escape(user.first_name), user.id)))
),
mention=await (mention_html(escape(user.first_name), user.id)),
chatname=escape(m.chat.title)
if chat_type != "private"
else escape(user.first_name),
id=user.id,
)
else:
teks = ""
return teks
@Gojo.on_message(command("cleanwelcome") & admin_filter)
async def cleanwlcm(_, m: Message):
db = Greetings(m.chat.id)
status = db.get_current_cleanwelcome_settings()
args = m.text.split(" ", 1)
if len(args) >= 2:
if args[1].lower() == "on":
db.set_current_cleanwelcome_settings(True)
await m.reply_text("Turned on!")
return
if args[1].lower() == "off":
db.set_current_cleanwelcome_settings(False)
await m.reply_text("Turned off!")
return
await m.reply_text("what are you trying to do ??")
return
await m.reply_text(f"Current settings:- {status}")
return
@Gojo.on_message(command("cleangoodbye") & admin_filter)
async def cleangdbye(_, m: Message):
db = Greetings(m.chat.id)
status = db.get_current_cleangoodbye_settings()
args = m.text.split(" ", 1)
if len(args) >= 2:
if args[1].lower() == "on":
db.set_current_cleangoodbye_settings(True)
await m.reply_text("Turned on!")
return
if args[1].lower() == "off":
db.set_current_cleangoodbye_settings(False)
await m.reply_text("Turned off!")
return
await m.reply_text("what are you trying to do ??")
return
await m.reply_text(f"Current settings:- {status}")
return
@Gojo.on_message(command("cleanservice") & admin_filter)
async def cleanservice(_, m: Message):
db = Greetings(m.chat.id)
status = db.get_current_cleanservice_settings()
args = m.text.split(" ", 1)
if len(args) >= 2:
if args[1].lower() == "on":
db.set_current_cleanservice_settings(True)
await m.reply_text("Turned on!")
return
if args[1].lower() == "off":
db.set_current_cleanservice_settings(False)
await m.reply_text("Turned off!")
return
await m.reply_text("what are you trying to do ??")
return
await m.reply_text(f"Current settings:- {status}")
return
@Gojo.on_message(command("setwelcome") & admin_filter & bot_admin_filter)
async def save_wlcm(_, m: Message):
db = Greetings(m.chat.id)
if m and not m.from_user:
return
args = m.text.split(None, 1)
if len(args) >= 4096:
await m.reply_text(
"Word limit exceed !!",
)
return
if not (m.reply_to_message and m.reply_to_message.text) and len(m.command) == 0:
await m.reply_text(
"Error: There is no text in here! and only text with buttons are supported currently !",
)
return
text, msgtype, _ = await get_wlcm_type(m)
if not m.reply_to_message and msgtype == Types.TEXT and len(m.command) <= 2:
await m.reply_text(f"<code>{m.text}</code>\n\nError: There is no data in here!")
return
if not text and not msgtype:
await m.reply_text(
"Please provide some data!",
)
return
if not msgtype:
await m.reply_text("Please provide some data for this to reply with!")
return
db.set_welcome_text(text)
await m.reply_text("Saved welcome!")
return
@Gojo.on_message(command("setgoodbye") & admin_filter & bot_admin_filter)
async def save_gdbye(_, m: Message):
db = Greetings(m.chat.id)
if m and not m.from_user:
return
args = m.text.split(None, 1)
if len(args) >= 4096:
await m.reply_text(
"Word limit exceeds !!",
)
return
if not (m.reply_to_message and m.reply_to_message.text) and len(m.command) == 0:
await m.reply_text(
"Error: There is no text in here! and only text with buttons are supported currently !",
)
return
text, msgtype, _ = await get_wlcm_type(m)
if not m.reply_to_message and msgtype == Types.TEXT and len(m.command) <= 2:
await m.reply_text(f"<code>{m.text}</code>\n\nError: There is no data in here!")
return
if not text and not msgtype:
await m.reply_text(
"Please provide some data!",
)
return
if not msgtype:
await m.reply_text("Please provide some data for this to reply with!")
return
db.set_goodbye_text(text)
await m.reply_text("Saved goodbye!")
return
@Gojo.on_message(command("resetgoodbye") & admin_filter & bot_admin_filter)
async def resetgb(_, m: Message):
db = Greetings(m.chat.id)
if m and not m.from_user:
return
text = "Sad to see you leaving {first}.\nTake Care!"
db.set_goodbye_text(text)
await m.reply_text("Ok Done!")
return
@Gojo.on_message(command("resetwelcome") & admin_filter & bot_admin_filter)
async def resetwlcm(_, m: Message):
db = Greetings(m.chat.id)
if m and not m.from_user:
return
text = "Hey {first}, welcome to {chatname}!"
db.set_welcome_text(text)
await m.reply_text("Done!")
return
@Gojo.on_message(filters.service & filters.group, group=59)
async def cleannnnn(_, m: Message):
db = Greetings(m.chat.id)
clean = db.get_current_cleanservice_settings()
try:
if clean:
await m.delete()
except Exception:
pass
@Gojo.on_chat_member_updated(filters.group, group=69)
async def member_has_joined(c: Gojo, member: ChatMemberUpdated):
if (
member.new_chat_member
and member.new_chat_member.status not in {"banned", "left", "restricted"}
and not member.old_chat_member
):
pass
else:
return
user = member.new_chat_member.user if member.new_chat_member else member.from_user
db = Greetings(member.chat.id)
banned_users = gdb.check_gban(user.id)
try:
if user.id == Config.BOT_ID:
return
if user.id in DEV_USERS:
await c.send_animation(
member.chat.id,
"./extras/william.gif",
"OwO My ***DEV*** has also joined the chat!",
unsave=True,
)
return
if banned_users:
await member.chat.ban_member(user.id)
await c.send_message(
member.chat.id,
f"{user.mention} was globally banned so i banned!",
)
return
if user.is_bot:
return # ignore bots
except ChatAdminRequired:
return
status = db.get_welcome_status()
oo = db.get_welcome_text()
parse_words = [
"first",
"last",
"fullname",
"username",
"mention",
"id",
"chatname",
]
hmm = await escape_mentions_using_curly_brackets_wl(member, True, oo, parse_words)
if status:
tek, button = await parse_button(hmm)
button = await build_keyboard(button)
button = InlineKeyboardMarkup(button) if button else None
if "%%%" in tek:
filter_reply = tek.split("%%%")
teks = choice(filter_reply)
else:
teks = tek
ifff = db.get_current_cleanwelcome_id()
gg = db.get_current_cleanwelcome_settings()
if ifff and gg:
try:
await c.delete_messages(member.chat.id, int(ifff))
except RPCError:
pass
try:
jj = await c.send_message(
member.chat.id,
text=teks,
reply_markup=button,
disable_web_page_preview=True,
)
if jj:
db.set_cleanwlcm_id(int(jj.message_id))
except RPCError as e:
print(e)
return
else:
return
@Gojo.on_chat_member_updated(filters.group, group=99)
async def member_has_left(c: Gojo, member: ChatMemberUpdated):
if (
not member.new_chat_member
and member.old_chat_member.status not in {"banned", "restricted"}
and member.old_chat_member
):
pass
else:
return
db = Greetings(member.chat.id)
status = db.get_goodbye_status()
oo = db.get_goodbye_text()
parse_words = [
"first",
"last",
"fullname",
"id",
"username",
"mention",
"chatname",
]
user = member.old_chat_member.user if member.old_chat_member else member.from_user
hmm = await escape_mentions_using_curly_brackets_wl(member, False, oo, parse_words)
if status:
tek, button = await parse_button(hmm)
button = await build_keyboard(button)
button = InlineKeyboardMarkup(button) if button else None
if "%%%" in tek:
filter_reply = tek.split("%%%")
teks = choice(filter_reply)
else:
teks = tek
ifff = db.get_current_cleangoodbye_id()
iii = db.get_current_cleangoodbye_settings()
if ifff and iii:
try:
await c.delete_messages(member.chat.id, int(ifff))
except RPCError:
pass
if user.id in DEV_USERS:
await c.send_message(
member.chat.id,
"Will miss you master :(",
)
return
try:
ooo = await c.send_message(
member.chat.id,
text=teks,
reply_markup=button,
disable_web_page_preview=True,
)
if ooo:
db.set_cleangoodbye_id(int(ooo.message_id))
return
except RPCError as e:
print(e)
return
else:
return
@Gojo.on_message(command("welcome") & admin_filter)
async def welcome(c: Gojo, m: Message):
db = Greetings(m.chat.id)
status = db.get_welcome_status()
oo = db.get_welcome_text()
args = m.text.split(" ", 1)
if m and not m.from_user:
return
if len(args) >= 2:
if args[1].lower() == "noformat":
await m.reply_text(
f"""Current welcome settings:-
Welcome power: {status}
Clean Welcome: {db.get_current_cleanwelcome_settings()}
Cleaning service: {db.get_current_cleanservice_settings()}
Welcome text in no formating:
""",
)
await c.send_message(
m.chat.id, text=oo, parse_mode=enums.ParseMode.DISABLED
)
return
if args[1].lower() == "on":
db.set_current_welcome_settings(True)
await m.reply_text("Turned on!")
return
if args[1].lower() == "off":
db.set_current_welcome_settings(False)
await m.reply_text("Turned off!")
return
await m.reply_text("what are you trying to do ??")
return
await m.reply_text(
f"""Current welcome settings:-
Welcome power: {status}
Clean Welcome: {db.get_current_cleanwelcome_settings()}
Cleaning service: {db.get_current_cleanservice_settings()}
Welcome text:
""",
)
tek, button = await parse_button(oo)
button = await build_keyboard(button)
button = InlineKeyboardMarkup(button) if button else None
await c.send_message(m.chat.id, text=tek, reply_markup=button)
return
@Gojo.on_message(command("goodbye") & admin_filter)
async def goodbye(c: Gojo, m: Message):
db = Greetings(m.chat.id)
status = db.get_goodbye_status()
oo = db.get_goodbye_text()
args = m.text.split(" ", 1)
if m and not m.from_user:
return
if len(args) >= 2:
if args[1].lower() == "noformat":
await m.reply_text(
f"""Current goodbye settings:-
Goodbye power: {status}
Clean Goodbye: {db.get_current_cleangoodbye_settings()}
Cleaning service: {db.get_current_cleanservice_settings()}
Goodbye text in no formating:
""",
)
await c.send_message(
m.chat.id, text=oo, parse_mode=enums.ParseMode.DISABLED
)
return
if args[1].lower() == "on":
db.set_current_goodbye_settings(True)
await m.reply_text("Turned on!")
return
if args[1].lower() == "off":
db.set_current_goodbye_settings(False)
await m.reply_text("Turned off!")
return
await m.reply_text("what are you trying to do ??")
return
await m.reply_text(
f"""Current Goodbye settings:-
Goodbye power: {status}
Clean Goodbye: {db.get_current_cleangoodbye_settings()}
Cleaning service: {db.get_current_cleanservice_settings()}
Goodbye text:
""",
)
tek, button = await parse_button(oo)
button = await build_keyboard(button)
button = InlineKeyboardMarkup(button) if button else None
await c.send_message(m.chat.id, text=tek, reply_markup=button)
return
__PLUGIN__ = "greetings"
__alt_name__ = ["welcome", "goodbye", "cleanservice"]
__HELP__ = """
***Greetings***
Customize your group's welcome / goodbye messages that can be personalised in multiple ways.
Note:
a) Currently it supports only text!
b) Gojo must be an admin to greet and goodbye users.
Admin Commands:
* /setwelcome <reply> : Sets a custom welcome message.
* /setgoodbye <reply> : Sets a custom goodbye message.
* /resetwelcome : Resets to bot default welcome message.
* /resetgoodbye : Resets to bot default goodbye message.
* /welcome <on/off> | noformat : enable/disable | Shows the current welcome message | settings.
* /goodbye <on/off> | noformat : enable/disable | Shows the current goodbye message | settings.
* /cleanwelcome <on/off> : Shows or sets the current clean welcome settings.
* /cleangoodbye <on/off> : Shows or sets the current clean goodbye settings.
── **Cleaner** ──:
* /cleanservice <on/off> : Use it to clean all service messages automatically or to view current status.
── **Format** ──
Check /markdownhelp for help related to formatting!"""