diff --git a/bot/__main__.py b/bot/__main__.py
index f5903cfbb..00fd8a17a 100644
--- a/bot/__main__.py
+++ b/bot/__main__.py
@@ -98,7 +98,7 @@ async def stats(_, message):
@new_thread
async def start(client, message):
buttons = ButtonMaker()
- reply_markup = buttons.menu(2)
+ reply_markup = buttons.column(2)
if len(message.command) > 1 and message.command[1] == "private":
await deleteMessage(message)
elif len(message.command) > 1 and len(message.command[1]) == 36:
@@ -185,7 +185,7 @@ def parseline(line):
endLine = ""
btn = ButtonMaker()
btn.callback('Close', f'aeon {user_id} close')
- reply_message = await sendMessage(message, startLine + escape(Loglines) + endLine, btn.menu(1))
+ reply_message = await sendMessage(message, startLine + escape(Loglines) + endLine, btn.column(1))
await query.edit_message_reply_markup(None)
await deleteMessage(message)
await five_minute_del(reply_message)
@@ -202,7 +202,7 @@ def parseline(line):
async def log(_, message):
buttons = ButtonMaker()
buttons.callback('Log display', f'aeon {message.from_user.id} logdisplay')
- reply_message = await sendFile(message, 'log.txt', buttons=buttons.menu(1))
+ reply_message = await sendFile(message, 'log.txt', buttons=buttons.column(1))
await deleteMessage(message)
await five_minute_del(reply_message)
diff --git a/bot/helper/ext_utils/bot_utils.py b/bot/helper/ext_utils/bot_utils.py
index c576f02fb..4a764c20e 100644
--- a/bot/helper/ext_utils/bot_utils.py
+++ b/bot/helper/ext_utils/bot_utils.py
@@ -147,7 +147,7 @@ def bt_selection_buttons(id_):
buttons.callback("Pincode", f"btsel pin {gid} {pincode}")
buttons.callback("Cancel", f"btsel rm {gid} {id_}")
buttons.callback("Done Selecting", f"btsel done {gid} {id_}")
- return buttons.menu(2)
+ return buttons.column(2)
async def get_telegraph_list(telegraph_content):
@@ -157,7 +157,7 @@ async def get_telegraph_list(telegraph_content):
buttons = ButtonMaker()
buttons.url("View", f"https://telegra.ph/{path[0]}")
buttons = extra_btns(buttons)
- return buttons.menu(1)
+ return buttons.column(1)
def handleIndex(index, dic):
@@ -233,7 +233,7 @@ def get_readable_message():
buttons.callback("Prev", "status pre")
buttons.callback(f"{PAGE_NO}/{PAGES}", "status ref")
buttons.callback("Next", "status nex")
- button = buttons.menu(3)
+ button = buttons.column(3)
msg += f"• Tasks: {tasks}{bmax_task}"
msg += f"\n• Bot uptime: {currentTime}"
msg += f"\n• Free disk space: {get_readable_file_size(disk_usage('/usr/src/app/downloads/').free)}"
diff --git a/bot/helper/listeners/tasks_listener.py b/bot/helper/listeners/tasks_listener.py
index b89415878..74dac4f52 100644
--- a/bot/helper/listeners/tasks_listener.py
+++ b/bot/helper/listeners/tasks_listener.py
@@ -377,7 +377,7 @@ async def onUploadComplete(self, link, size, files, folders, mime_type, name, rc
await sendMessage(self.botpmmsg, msg + lmsg + fmsg)
await deleteMessage(self.botpmmsg)
if self.isSuperGroup:
- await sendMessage(self.message, f'{msg}Files has been sent to your inbox', inboxButton.menu(1))
+ await sendMessage(self.message, f'{msg}Files has been sent to your inbox', inboxButton.column(1))
else:
await deleteMessage(self.botpmmsg)
if self.seed:
@@ -402,12 +402,12 @@ async def onUploadComplete(self, link, size, files, folders, mime_type, name, rc
share_url += '/'
buttons.url('Index link', share_url)
buttons = extra_btns(buttons)
- button = buttons.menu(2)
+ button = buttons.column(2)
elif rclonePath:
msg += f'• Path: {rclonePath}
\n'
button = None
buttons = extra_btns(buttons)
- button = buttons.menu(2)
+ button = buttons.column(2)
msg += f'• User ID: {self.message.from_user.id}
\n'
msg += f'• By: {self.tag}\n\n'
@@ -418,7 +418,7 @@ async def onUploadComplete(self, link, size, files, folders, mime_type, name, rc
await sendMessage(self.botpmmsg, msg, button, 'Random')
await deleteMessage(self.botpmmsg)
if self.isSuperGroup:
- await sendMessage(self.message, f'{msg} Links has been sent to your inbox', inboxButton.menu(1))
+ await sendMessage(self.message, f'{msg} Links has been sent to your inbox', inboxButton.column(1))
else:
await deleteMessage(self.botpmmsg)
if self.seed:
diff --git a/bot/helper/mirror_leech_utils/rclone_utils/list.py b/bot/helper/mirror_leech_utils/rclone_utils/list.py
index 18a64ead1..1f29abfbe 100644
--- a/bot/helper/mirror_leech_utils/rclone_utils/list.py
+++ b/bot/helper/mirror_leech_utils/rclone_utils/list.py
@@ -176,7 +176,7 @@ async def get_path_buttons(self):
if self.path:
buttons.callback('Back To Root', 'rcq root', position='footer')
buttons.callback('Cancel', 'rcq cancel', position='footer')
- button = buttons.menu(f_cols=2)
+ button = buttons.column(f_cols=2)
msg = 'Choose Path:' + ('\nTransfer Type: Download' if self.list_status ==
'rcd' else '\nTransfer Type: Upload')
if self.list_status == 'rcu':
@@ -239,7 +239,7 @@ async def list_remotes(self):
if self.__rc_user and self.__rc_owner:
buttons.callback('Back', 'rcq back re', position='footer')
buttons.callback('Cancel', 'rcq cancel', position='footer')
- button = buttons.menu(2)
+ button = buttons.column(2)
await self.__send_list_message(msg, button)
async def list_config(self):
@@ -252,7 +252,7 @@ async def list_config(self):
buttons.callback('Owner Config', 'rcq owner')
buttons.callback('My Config', 'rcq user')
buttons.callback('Cancel', 'rcq cancel')
- button = buttons.menu(2)
+ button = buttons.column(2)
await self.__send_list_message(msg, button)
else:
self.config_path = 'rcl.conf' if self.__rc_owner else self.user_rcc_path
diff --git a/bot/helper/mirror_leech_utils/upload_utils/telegramEngine.py b/bot/helper/mirror_leech_utils/upload_utils/telegramEngine.py
index 55cf76148..f975923e2 100644
--- a/bot/helper/mirror_leech_utils/upload_utils/telegramEngine.py
+++ b/bot/helper/mirror_leech_utils/upload_utils/telegramEngine.py
@@ -95,7 +95,7 @@ async def __buttons(self, up_path, is_video=False):
LOGGER.info(m)
except Exception as e:
LOGGER.error(f"MediaInfo Error: {str(e)}")
- return buttons.menu(1) if self.__has_buttons else None
+ return buttons.column(1) if self.__has_buttons else None
async def __copy_file(self):
try:
diff --git a/bot/helper/telegram_helper/button_build.py b/bot/helper/telegram_helper/button_build.py
index 1708430ff..3c7b88947 100644
--- a/bot/helper/telegram_helper/button_build.py
+++ b/bot/helper/telegram_helper/button_build.py
@@ -2,46 +2,43 @@
class ButtonMaker:
def __init__(self):
- self.__button = []
- self.__header_button = []
- self.__footer_button = []
+ self.main_buttons = []
+ self.header_buttons = []
+ self.footer_buttons = []
- def url(self, key, link, position=None):
- if not position:
- self.__button.append(InlineKeyboardButton(text=key, url=link))
- elif position == 'header':
- self.__header_button.append(
- InlineKeyboardButton(text=key, url=link))
+ def url(self, text, url, position=None):
+ button = InlineKeyboardButton(text=text, url=url)
+ if position == 'header':
+ self.header_buttons.append(button)
elif position == 'footer':
- self.__footer_button.append(
- InlineKeyboardButton(text=key, url=link))
+ self.footer_buttons.append(button)
+ else:
+ self.main_buttons.append(button)
- def callback(self, key, data, position=None):
- if not position:
- self.__button.append(InlineKeyboardButton(
- text=key, callback_data=data))
- elif position == 'header':
- self.__header_button.append(
- InlineKeyboardButton(text=key, callback_data=data))
+ def callback(self, text, callback_data, position=None):
+ button = InlineKeyboardButton(text=text, callback_data=callback_data)
+ if position == 'header':
+ self.header_buttons.append(button)
elif position == 'footer':
- self.__footer_button.append(
- InlineKeyboardButton(text=key, callback_data=data))
+ self.footer_buttons.append(button)
+ else:
+ self.main_buttons.append(button)
- def menu(self, b_cols=1, h_cols=8, f_cols=8):
- menu = [self.__button[i:i+b_cols]
- for i in range(0, len(self.__button), b_cols)]
- if self.__header_button:
- h_cnt = len(self.__header_button)
- if h_cnt > h_cols:
- header_buttons = [self.__header_button[i:i+h_cols]
- for i in range(0, len(self.__header_button), h_cols)]
- menu = header_buttons + menu
+ def column(self, main_columns=1, header_columns=8, footer_columns=8):
+ keyboard = [self.main_buttons[i:i + main_columns] for i in range(0, len(self.main_buttons), main_columns)]
+
+ if self.header_buttons:
+ if len(self.header_buttons) > header_columns:
+ header_chunks = [self.header_buttons[i:i + header_columns] for i in range(0, len(self.header_buttons), header_columns)]
+ keyboard = header_chunks + keyboard
else:
- menu.insert(0, self.__header_button)
- if self.__footer_button:
- if len(self.__footer_button) > f_cols:
- [menu.append(self.__footer_button[i:i+f_cols])
- for i in range(0, len(self.__footer_button), f_cols)]
+ keyboard.insert(0, self.header_buttons)
+
+ if self.footer_buttons:
+ if len(self.footer_buttons) > footer_columns:
+ footer_chunks = [self.footer_buttons[i:i + footer_columns] for i in range(0, len(self.footer_buttons), footer_columns)]
+ keyboard += footer_chunks
else:
- menu.append(self.__footer_button)
- return InlineKeyboardMarkup(menu)
\ No newline at end of file
+ keyboard.append(self.footer_buttons)
+
+ return InlineKeyboardMarkup(keyboard)
\ No newline at end of file
diff --git a/bot/modules/bot_settings.py b/bot/modules/bot_settings.py
index 5405adfe4..e9a74f87e 100644
--- a/bot/modules/bot_settings.py
+++ b/bot/modules/bot_settings.py
@@ -413,7 +413,7 @@ async def get_buttons(key=None, edit_type=None, edit_mode=None, mess=None):
buttons.callback('Make it True', f"botset boolvar {key} on")
else:
buttons.callback('Make it False', f"botset boolvar {key} off")
- button = buttons.menu(1) if key is None else buttons.menu(2)
+ button = buttons.column(1) if key is None else buttons.column(2)
return msg, button
diff --git a/bot/modules/cancel_mirror.py b/bot/modules/cancel_mirror.py
index b1addecd9..451f745ba 100644
--- a/bot/modules/cancel_mirror.py
+++ b/bot/modules/cancel_mirror.py
@@ -70,7 +70,7 @@ async def cancell_all_buttons(_, message):
buttons.callback("Paused", f"stopall {MirrorStatus.STATUS_PAUSED}")
buttons.callback("All", "stopall all")
buttons.callback("Close", "stopall close")
- button = buttons.menu(2)
+ button = buttons.column(2)
can_msg = await sendMessage(message, 'Choose tasks to cancel.', button)
await deleteMessage(message)
await one_minute_del(can_msg)
diff --git a/bot/modules/clone.py b/bot/modules/clone.py
index 34352e267..a57d61e05 100644
--- a/bot/modules/clone.py
+++ b/bot/modules/clone.py
@@ -233,7 +233,7 @@ async def __run_multi():
for __i, __msg in enumerate(error_msg, 1):
final_msg += f'\n
{__i}: {__msg}' if error_button is not None: - error_button = error_button.menu(2) + error_button = error_button.column(2) await delete_links(message) force_m = await sendMessage(message, final_msg, error_button) await five_minute_del(force_m) diff --git a/bot/modules/images.py b/bot/modules/images.py index 7b05e6a87..54e10cee8 100644 --- a/bot/modules/images.py +++ b/bot/modules/images.py @@ -67,7 +67,7 @@ async def pictures(_, message): buttons.callback("Close", f"images {user_id} close") buttons.callback("Remove all", f"images {user_id} removeall", 'footer') await deleteMessage(to_edit) - await sendMessage(message, f'Image No. : 1 / {len(IMAGES)}', buttons.menu(2), IMAGES[0]) + await sendMessage(message, f'Image No. : 1 / {len(IMAGES)}', buttons.column(2), IMAGES[0]) @new_task async def pics_callback(_, query): @@ -90,7 +90,7 @@ async def pics_callback(_, query): buttons.callback("Remove Image", f"images {data[1]} remove {ind}") buttons.callback("Close", f"images {data[1]} close") buttons.callback("Remove all", f"images {data[1]} removeall", 'footer') - await editMessage(message, pic_info, buttons.menu(2), IMAGES[ind]) + await editMessage(message, pic_info, buttons.column(2), IMAGES[ind]) elif data[2] == "remove": IMAGES.pop(int(data[3])) @@ -112,7 +112,7 @@ async def pics_callback(_, query): buttons.callback("Remove image", f"images {data[1]} remove {ind}") buttons.callback("Close", f"images {data[1]} close") buttons.callback("Remove all", f"images {data[1]} removeall", 'footer') - await editMessage(message, pic_info, buttons.menu(2), IMAGES[ind]) + await editMessage(message, pic_info, buttons.column(2), IMAGES[ind]) elif data[2] == 'removeall': IMAGES.clear() diff --git a/bot/modules/list.py b/bot/modules/list.py index 6f8b56afd..17c4897c7 100644 --- a/bot/modules/list.py +++ b/bot/modules/list.py @@ -16,7 +16,7 @@ async def list_buttons(user_id, isRecursive=True): buttons.callback("Both", f"list_types {user_id} both {isRecursive}") buttons.callback(f"Recursive: {isRecursive}", f"list_types {user_id} rec {isRecursive}") buttons.callback("Cancel", f"list_types {user_id} cancel") - return buttons.menu(2) + return buttons.column(2) async def _list_drive(key, message, item_type, isRecursive): LOGGER.info(f"listing: {key}") @@ -67,7 +67,7 @@ async def drive_list(_, message): if message.chat.type != message.chat.type.PRIVATE: msg, btn = await checking_access(user_id) if msg is not None: - reply_message = await sendMessage(message, msg, btn.menu(1)) + reply_message = await sendMessage(message, msg, btn.column(1)) await delete_links(message) await five_minute_del(reply_message) return diff --git a/bot/modules/mirror_leech.py b/bot/modules/mirror_leech.py index 7aff02cb9..e2c3b34de 100644 --- a/bot/modules/mirror_leech.py +++ b/bot/modules/mirror_leech.py @@ -230,7 +230,7 @@ async def __run_multi(): for __i, __msg in enumerate(error_msg, 1): final_msg += f'\n
{__i}: {__msg}' if error_button is not None: - error_button = error_button.menu(2) + error_button = error_button.column(2) await delete_links(message) force_m = await sendMessage(message, final_msg, error_button) await five_minute_del(force_m) diff --git a/bot/modules/torrent_search.py b/bot/modules/torrent_search.py index 216161a1c..493983a04 100644 --- a/bot/modules/torrent_search.py +++ b/bot/modules/torrent_search.py @@ -98,7 +98,7 @@ async def __search(key, site, message, method): link = await __getResult(search_results, key, message, method) buttons = ButtonMaker() buttons.url("View", link) - button = buttons.menu(1) + button = buttons.column(1) await editMessage(message, msg, button) @@ -175,7 +175,7 @@ def __api_buttons(user_id, method): for data, name in SITES.items(): buttons.callback(name, f"torser {user_id} {data} {method}") buttons.callback("Cancel", f"torser {user_id} cancel") - return buttons.menu(2) + return buttons.column(2) async def __plugin_buttons(user_id): @@ -184,7 +184,7 @@ async def __plugin_buttons(user_id): buttons.callback(siteName.capitalize(), f"torser {user_id} {siteName} plugin") buttons.callback('All', f"torser {user_id} all plugin") buttons.callback("Cancel", f"torser {user_id} cancel") - return buttons.menu(2) + return buttons.column(2) @new_thread async def torrentSearch(_, message): @@ -195,7 +195,7 @@ async def torrentSearch(_, message): if message.chat.type != message.chat.type.PRIVATE: msg, buttons = await checking_access(user_id, buttons) if msg is not None: - reply_message = await sendMessage(message, msg, buttons.menu(1)) + reply_message = await sendMessage(message, msg, buttons.column(1)) await delete_links(message) await five_minute_del(reply_message) return @@ -208,13 +208,13 @@ async def torrentSearch(_, message): buttons.callback('Trending', f"torser {user_id} apitrend") buttons.callback('Recent', f"torser {user_id} apirecent") buttons.callback("Cancel", f"torser {user_id} cancel") - button = buttons.menu(2) + button = buttons.column(2) reply_message = await sendMessage(message, "Send a search key along with command", button) elif SITES is not None: buttons.callback('Api', f"torser {user_id} apisearch") buttons.callback('Plugins', f"torser {user_id} plugin") buttons.callback("Cancel", f"torser {user_id} cancel") - button = buttons.menu(2) + button = buttons.column(2) reply_message = await sendMessage(message, 'Choose tool to search:', button) else: button = await __plugin_buttons(user_id) diff --git a/bot/modules/users_settings.py b/bot/modules/users_settings.py index e80c9de9d..0d4bc2a5a 100644 --- a/bot/modules/users_settings.py +++ b/bot/modules/users_settings.py @@ -49,7 +49,7 @@ async def get_user_settings(from_user, key=None, edit_type=None, edit_mode=None) buttons.callback("Reset", f"userset {user_id} reset_all") buttons.callback("Close", f"userset {user_id} close") text = f'User Settings for {name}' - button = buttons.menu(2) + button = buttons.column(2) elif key == 'universal': buttons.callback("YT-DLP Options", f"userset {user_id} yt_opt") ytopt = 'Not Exists' if (val:=user_dict.get('yt_opt', config_dict.get('YT_DLP_OPTIONS', ''))) == '' else val @@ -78,7 +78,7 @@ async def get_user_settings(from_user, key=None, edit_type=None, edit_mode=None) text += f'• Remname:
{remname}
'
buttons.callback("Back", f"userset {user_id} back", "footer")
buttons.callback("Close", f"userset {user_id} close", "footer")
- button = buttons.menu(2)
+ button = buttons.column(2)
elif key == 'mirror':
buttons.callback("RClone", f"userset {user_id} rcc")
rccmsg = "Exists" if await aiopath.exists(rclone_path) else "Not Exists"
@@ -92,7 +92,7 @@ async def get_user_settings(from_user, key=None, edit_type=None, edit_mode=None)
buttons.callback("Back", f"userset {user_id} back", "footer")
buttons.callback("Close", f"userset {user_id} close", "footer")
- button = buttons.menu(2)
+ button = buttons.column(2)
elif key == 'leech':
if user_dict.get('as_doc', False) or 'as_doc' not in user_dict and config_dict['AS_DOCUMENT']:
ltype = "DOCUMENT"
@@ -132,7 +132,7 @@ async def get_user_settings(from_user, key=None, edit_type=None, edit_mode=None)
buttons.callback("Back", f"userset {user_id} back", "footer")
buttons.callback("Close", f"userset {user_id} close", "footer")
- button = buttons.menu(2)
+ button = buttons.column(2)
elif edit_type:
text = f"{fname_dict[key]} Settings :\n\n"
if key == 'rcc':
@@ -166,7 +166,7 @@ async def get_user_settings(from_user, key=None, edit_type=None, edit_mode=None)
buttons.callback("Delete", f"userset {user_id} d{key}")
buttons.callback("Back", f"userset {user_id} back {edit_type}", "footer")
buttons.callback("Close", f"userset {user_id} close", "footer")
- button = buttons.menu(2)
+ button = buttons.column(2)
return text, button
@@ -466,7 +466,7 @@ async def edit_user_settings(client, query):
buttons.callback('Yes', f"userset {user_id} reset_now y")
buttons.callback('No', f"userset {user_id} reset_now n")
buttons.callback("Close", f"userset {user_id} close", "footer")
- await editMessage(message, 'Do you want to Reset Settings ?', buttons.menu(2))
+ await editMessage(message, 'Do you want to Reset Settings ?', buttons.column(2))
elif data[2] == 'reset_now':
handler_dict[user_id] = False
if data[3] == 'n':
@@ -520,7 +520,7 @@ async def send_users_settings(client, message):
msg = f'Total Users / Chats Data Saved : {len(user_data)}'
buttons = ButtonMaker()
buttons.callback("Close", f"userset {message.from_user.id} close")
- button = buttons.menu(1)
+ button = buttons.column(1)
for user, data in user_data.items():
msg += f'\n\n{user}
:'
if data:
@@ -542,7 +542,7 @@ async def send_users_settings(client, message):
buttons = ButtonMaker()
buttons.callback("Delete", f"userset {message.from_user.id} user_del {userid}")
buttons.callback("Close", f"userset {message.from_user.id} close")
- button = buttons.menu(1)
+ button = buttons.column(1)
for key, value in data.items():
if key in ['token', 'time']:
continue
diff --git a/bot/modules/ytdlp.py b/bot/modules/ytdlp.py
index 18c859310..a08f5686e 100644
--- a/bot/modules/ytdlp.py
+++ b/bot/modules/ytdlp.py
@@ -109,7 +109,7 @@ async def get_quality(self, result):
buttons.callback('Best Videos', 'ytq bv*+ba/b')
buttons.callback('Best Audios', 'ytq ba/b')
buttons.callback('Cancel', 'ytq cancel', 'footer')
- self.__main_buttons = buttons.menu(3)
+ self.__main_buttons = buttons.column(3)
msg = f'Choose Playlist Videos Quality:\nTimeout: {get_readable_time(self.__timeout-(time()-self.__time), True)}'
else:
format_dict = result.get('formats')
@@ -155,7 +155,7 @@ async def get_quality(self, result):
buttons.callback('Best Video', 'ytq bv*+ba/b')
buttons.callback('Best Audio', 'ytq ba/b')
buttons.callback('Cancel', 'ytq cancel', 'footer')
- self.__main_buttons = buttons.menu(2)
+ self.__main_buttons = buttons.column(2)
msg = f'Choose Video Quality:\nTimeout: {get_readable_time(self.__timeout-(time()-self.__time), True)}'
self.__reply_to = await sendMessage(self.__message, msg, self.__main_buttons)
await wrap_future(future)
@@ -178,7 +178,7 @@ async def qual_subbuttons(self, b_name):
buttons.callback(button_name, f'ytq sub {b_name} {tbr}')
buttons.callback('Back', 'ytq back', 'footer')
buttons.callback('Cancel', 'ytq cancel', 'footer')
- subbuttons = buttons.menu(2)
+ subbuttons = buttons.column(2)
msg = f'Choose Bit rate for {b_name}:\nTimeout: {get_readable_time(self.__timeout-(time()-self.__time), True)}'
await editMessage(self.__reply_to, msg, subbuttons)
@@ -191,7 +191,7 @@ async def mp3_subbuttons(self):
buttons.callback(f'{q}K-mp3', f'ytq {audio_format}')
buttons.callback('Back', 'ytq back')
buttons.callback('Cancel', 'ytq cancel')
- subbuttons = buttons.menu(3)
+ subbuttons = buttons.column(3)
msg = f'Choose mp3 Audio{i} Bitrate:\nTimeout: {get_readable_time(self.__timeout-(time()-self.__time), True)}'
await editMessage(self.__reply_to, msg, subbuttons)
@@ -203,7 +203,7 @@ async def audio_format(self):
buttons.callback(frmt, f'ytq aq {audio_format}')
buttons.callback('Back', 'ytq back', 'footer')
buttons.callback('Cancel', 'ytq cancel', 'footer')
- subbuttons = buttons.menu(3)
+ subbuttons = buttons.column(3)
msg = f'Choose Audio{i} Format:\nTimeout: {get_readable_time(self.__timeout-(time()-self.__time), True)}'
await editMessage(self.__reply_to, msg, subbuttons)
@@ -215,7 +215,7 @@ async def audio_quality(self, format):
buttons.callback(qual, f'ytq {audio_format}')
buttons.callback('Back', 'ytq aq back')
buttons.callback('Cancel', 'ytq aq cancel')
- subbuttons = buttons.menu(5)
+ subbuttons = buttons.column(5)
msg = f'Choose Audio{i} Qaulity:\n0 is best and 10 is worst\nTimeout: {get_readable_time(self.__timeout-(time()-self.__time), True)}'
await editMessage(self.__reply_to, msg, subbuttons)
@@ -377,7 +377,7 @@ async def __run_multi():
for __i, __msg in enumerate(error_msg, 1):
final_msg += f'\n{__i}: {__msg}' if error_button is not None: - error_button = error_button.menu(2) + error_button = error_button.column(2) await delete_links(message) force_m = await sendMessage(message, final_msg, error_button) await five_minute_del(force_m)