from pyrogram import filters
from pyrogram.enums import ChatType
from pyrogram.errors import MessageNotModified
from pyrogram.types import (
CallbackQuery,
InlineKeyboardButton,
InlineKeyboardMarkup,
Message,
)
from DragMusic import app
from DragMusic.utils.database import (
add_nonadmin_chat,
get_authuser,
get_authuser_names,
get_playmode,
get_playtype,
get_upvote_count,
is_nonadmin_chat,
is_skipmode,
remove_nonadmin_chat,
set_playmode,
set_playtype,
set_upvotes,
skip_off,
skip_on,
)
from DragMusic.utils.decorators.admins import ActualAdminCB
from DragMusic.utils.decorators.language import language, languageCB
from DragMusic.utils.inline.settings import (
auth_users_markup,
playmode_users_markup,
setting_markup,
vote_mode_markup,
)
from DragMusic.utils.inline.start import private_panel
from config import BANNED_USERS, OWNER_ID
@app.on_message(
filters.command(["settings", "setting"]) & filters.group & ~BANNED_USERS
)
@language
async def settings_mar(client, message: Message, _):
buttons = setting_markup(_)
await message.reply_text(
_["setting_1"].format(app.mention, message.chat.id, message.chat.title),
reply_markup=InlineKeyboardMarkup(buttons),
)
@app.on_callback_query(filters.regex("settings_helper") & ~BANNED_USERS)
@languageCB
async def settings_cb(client, CallbackQuery, _):
try:
await CallbackQuery.answer(_["set_cb_5"])
except:
pass
buttons = setting_markup(_)
return await CallbackQuery.edit_message_text(
_["setting_1"].format(
app.mention,
CallbackQuery.message.chat.id,
CallbackQuery.message.chat.title,
),
reply_markup=InlineKeyboardMarkup(buttons),
)
@app.on_callback_query(filters.regex("settingsback_helper") & ~BANNED_USERS)
@languageCB
async def settings_back_markup(client, CallbackQuery: CallbackQuery, _):
try:
await CallbackQuery.answer()
except:
pass
if CallbackQuery.message.chat.type == ChatType.PRIVATE:
await app.resolve_peer(OWNER_ID)
OWNER = OWNER_ID
buttons = private_panel(_)
return await CallbackQuery.edit_message_text(
_["start_2"].format(CallbackQuery.from_user.mention, app.mention),
reply_markup=InlineKeyboardMarkup(buttons),
)
else:
buttons = setting_markup(_)
return await CallbackQuery.edit_message_reply_markup(
reply_markup=InlineKeyboardMarkup(buttons)
)
@app.on_callback_query(
filters.regex(
pattern=r"^(SEARCHANSWER|PLAYMODEANSWER|PLAYTYPEANSWER|AUTHANSWER|ANSWERVOMODE|VOTEANSWER|PM|AU|VM)$"
)
& ~BANNED_USERS
)
@languageCB
async def without_Admin_rights(client, CallbackQuery, _):
command = CallbackQuery.matches[0].group(1)
if command == "SEARCHANSWER":
try:
return await CallbackQuery.answer(_["setting_2"], show_alert=True)
except:
return
if command == "PLAYMODEANSWER":
try:
return await CallbackQuery.answer(_["setting_5"], show_alert=True)
except:
return
if command == "PLAYTYPEANSWER":
try:
return await CallbackQuery.answer(_["setting_6"], show_alert=True)
except:
return
if command == "AUTHANSWER":
try:
return await CallbackQuery.answer(_["setting_3"], show_alert=True)
except:
return
if command == "VOTEANSWER":
try:
return await CallbackQuery.answer(
_["setting_8"],
show_alert=True,
)
except:
return
if command == "ANSWERVOMODE":
current = await get_upvote_count(CallbackQuery.message.chat.id)
try:
return await CallbackQuery.answer(
_["setting_9"].format(current),
show_alert=True,
)
except:
return
if command == "PM":
try:
await CallbackQuery.answer(_["set_cb_2"], show_alert=True)
except:
pass
playmode = await get_playmode(CallbackQuery.message.chat.id)
if playmode == "Direct":
Direct = True
else:
Direct = None
is_non_admin = await is_nonadmin_chat(CallbackQuery.message.chat.id)
if not is_non_admin:
Group = True
else:
Group = None
playty = await get_playtype(CallbackQuery.message.chat.id)
if playty == "Everyone":
Playtype = None
else:
Playtype = True
buttons = playmode_users_markup(_, Direct, Group, Playtype)
if command == "AU":
try:
await CallbackQuery.answer(_["set_cb_1"], show_alert=True)
except:
pass
is_non_admin = await is_nonadmin_chat(CallbackQuery.message.chat.id)
if not is_non_admin:
buttons = auth_users_markup(_, True)
else:
buttons = auth_users_markup(_)
if command == "VM":
mode = await is_skipmode(CallbackQuery.message.chat.id)
current = await get_upvote_count(CallbackQuery.message.chat.id)
buttons = vote_mode_markup(_, current, mode)
try:
return await CallbackQuery.edit_message_reply_markup(
reply_markup=InlineKeyboardMarkup(buttons)
)
except MessageNotModified:
return
@app.on_callback_query(filters.regex("FERRARIUDTI") & ~BANNED_USERS)
@ActualAdminCB
async def addition(client, CallbackQuery, _):
callback_data = CallbackQuery.data.strip()
mode = callback_data.split(None, 1)[1]
if not await is_skipmode(CallbackQuery.message.chat.id):
return await CallbackQuery.answer(_["setting_10"], show_alert=True)
current = await get_upvote_count(CallbackQuery.message.chat.id)
if mode == "M":
final = current - 2
print(final)
if final == 0:
return await CallbackQuery.answer(
_["setting_11"],
show_alert=True,
)
if final <= 2:
final = 2
await set_upvotes(CallbackQuery.message.chat.id, final)
else:
final = current + 2
print(final)
if final == 17:
return await CallbackQuery.answer(
_["setting_12"],
show_alert=True,
)
if final >= 15:
final = 15
await set_upvotes(CallbackQuery.message.chat.id, final)
buttons = vote_mode_markup(_, final, True)
try:
return await CallbackQuery.edit_message_reply_markup(
reply_markup=InlineKeyboardMarkup(buttons)
)
except MessageNotModified:
return
@app.on_callback_query(
filters.regex(pattern=r"^(MODECHANGE|CHANNELMODECHANGE|PLAYTYPECHANGE)$")
& ~BANNED_USERS
)
@ActualAdminCB
async def playmode_ans(client, CallbackQuery, _):
command = CallbackQuery.matches[0].group(1)
if command == "CHANNELMODECHANGE":
is_non_admin = await is_nonadmin_chat(CallbackQuery.message.chat.id)
if not is_non_admin:
await add_nonadmin_chat(CallbackQuery.message.chat.id)
Group = None
else:
await remove_nonadmin_chat(CallbackQuery.message.chat.id)
Group = True
playmode = await get_playmode(CallbackQuery.message.chat.id)
if playmode == "Direct":
Direct = True
else:
Direct = None
playty = await get_playtype(CallbackQuery.message.chat.id)
if playty == "Everyone":
Playtype = None
else:
Playtype = True
buttons = playmode_users_markup(_, Direct, Group, Playtype)
if command == "MODECHANGE":
try:
await CallbackQuery.answer(_["set_cb_3"], show_alert=True)
except:
pass
playmode = await get_playmode(CallbackQuery.message.chat.id)
if playmode == "Direct":
await set_playmode(CallbackQuery.message.chat.id, "Inline")
Direct = None
else:
await set_playmode(CallbackQuery.message.chat.id, "Direct")
Direct = True
is_non_admin = await is_nonadmin_chat(CallbackQuery.message.chat.id)
if not is_non_admin:
Group = True
else:
Group = None
playty = await get_playtype(CallbackQuery.message.chat.id)
if playty == "Everyone":
Playtype = False
else:
Playtype = True
buttons = playmode_users_markup(_, Direct, Group, Playtype)
if command == "PLAYTYPECHANGE":
try:
await CallbackQuery.answer(_["set_cb_3"], show_alert=True)
except:
pass
playty = await get_playtype(CallbackQuery.message.chat.id)
if playty == "Everyone":
await set_playtype(CallbackQuery.message.chat.id, "Admin")
Playtype = False
else:
await set_playtype(CallbackQuery.message.chat.id, "Everyone")
Playtype = True
playmode = await get_playmode(CallbackQuery.message.chat.id)
if playmode == "Direct":
Direct = True
else:
Direct = None
is_non_admin = await is_nonadmin_chat(CallbackQuery.message.chat.id)
if not is_non_admin:
Group = True
else:
Group = None
buttons = playmode_users_markup(_, Direct, Group, Playtype)
try:
return await CallbackQuery.edit_message_reply_markup(
reply_markup=InlineKeyboardMarkup(buttons)
)
except MessageNotModified:
return
@app.on_callback_query(filters.regex(pattern=r"^(AUTH|AUTHLIST)$") & ~BANNED_USERS)
@ActualAdminCB
async def authusers_mar(client, CallbackQuery, _):
command = CallbackQuery.matches[0].group(1)
if command == "AUTHLIST":
_authusers = await get_authuser_names(CallbackQuery.message.chat.id)
if not _authusers:
try:
return await CallbackQuery.answer(_["setting_4"], show_alert=True)
except:
return
else:
try:
await CallbackQuery.answer(_["set_cb_4"], show_alert=True)
except:
pass
j = 0
await CallbackQuery.edit_message_text(_["auth_6"])
msg = _["auth_7"].format(CallbackQuery.message.chat.title)
for note in _authusers:
_note = await get_authuser(CallbackQuery.message.chat.id, note)
user_id = _note["auth_user_id"]
admin_id = _note["admin_id"]
admin_name = _note["admin_name"]
try:
user = await app.get_users(user_id)
user = user.first_name
j += 1
except:
continue
msg += f"{j}➤ {user}[{user_id}
]\n"
msg += f" {_['auth_8']} {admin_name}[{admin_id}
]\n\n"
upl = InlineKeyboardMarkup(
[
[
InlineKeyboardButton(
text=_["BACK_BUTTON"], callback_data=f"AU"
),
InlineKeyboardButton(
text=_["CLOSE_BUTTON"],
callback_data=f"close",
),
]
]
)
try:
return await CallbackQuery.edit_message_text(msg, reply_markup=upl)
except MessageNotModified:
return
try:
await CallbackQuery.answer(_["set_cb_3"], show_alert=True)
except:
pass
if command == "AUTH":
is_non_admin = await is_nonadmin_chat(CallbackQuery.message.chat.id)
if not is_non_admin:
await add_nonadmin_chat(CallbackQuery.message.chat.id)
buttons = auth_users_markup(_)
else:
await remove_nonadmin_chat(CallbackQuery.message.chat.id)
buttons = auth_users_markup(_, True)
try:
return await CallbackQuery.edit_message_reply_markup(
reply_markup=InlineKeyboardMarkup(buttons)
)
except MessageNotModified:
return
@app.on_callback_query(filters.regex("VOMODECHANGE") & ~BANNED_USERS)
@ActualAdminCB
async def vote_change(client, CallbackQuery, _):
command = CallbackQuery.matches[0].group(1)
try:
await CallbackQuery.answer(_["set_cb_3"], show_alert=True)
except:
pass
mod = None
if await is_skipmode(CallbackQuery.message.chat.id):
await skip_off(CallbackQuery.message.chat.id)
else:
mod = True
await skip_on(CallbackQuery.message.chat.id)
current = await get_upvote_count(CallbackQuery.message.chat.id)
buttons = vote_mode_markup(_, current, mod)
try:
return await CallbackQuery.edit_message_reply_markup(
reply_markup=InlineKeyboardMarkup(buttons)
)
except MessageNotModified:
return