Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Updated handlers, messages and database for async working
  • Loading branch information
Javinator9889 committed Jul 1, 2018
1 parent c4c1d55 commit 1dce7be
Show file tree
Hide file tree
Showing 7 changed files with 249 additions and 153 deletions.
305 changes: 183 additions & 122 deletions youtube_md_bot/.idea/workspace.xml

Large diffs are not rendered by default.

17 changes: 9 additions & 8 deletions youtube_md_bot/__init__.py
Expand Up @@ -24,13 +24,13 @@ def handler_definer():
handlers = []
with open(Constants.A_APP_MESSAGES, 'r') as messages_file:
messages: dict = messages_file.read()
start = StartHandler(messages["welcome"])
help_handler = HelpHandler(messages["help"])
dev = DeveloperHandler(messages["dev"])
video = VideoIDHandler(messages["video_id"])
url = URLHandler(messages["url_messages"])
text = TextHandler(messages["text"])
unexpected = UnexpectedHandler(messages["unexpected"])
start = StartHandler(messages)
help_handler = HelpHandler(messages)
dev = DeveloperHandler(messages)
video = VideoIDHandler(messages)
url = URLHandler(messages)
text = TextHandler(messages)
unexpected = UnexpectedHandler(messages)

handlers.append(CommandHandler("start", start.start))
handlers.append(CommandHandler("help", help_handler.help))
Expand All @@ -40,6 +40,7 @@ def handler_definer():
Filters.entity(MessageEntity.TEXT_LINK)), url.url_handler))
handlers.append(MessageHandler(Filters.text, text.message_handler))
handlers.append(MessageHandler(Filters.all, unexpected.unexpected))

return handlers


Expand Down Expand Up @@ -116,7 +117,7 @@ def main(arguments: Namespace):
Constants.L_PRIMARY_LOGGER_MODE)
logger.setup_logging(Constants.L_SECONDARY_LOGGER_NAME, Constants.L_SECONDARY_LOGGER_MODE)
try:
updater.start_polling(poll_interval=5, timeout=60)
updater.start_polling(poll_interval=1, timeout=90)
except KeyboardInterrupt:
cPrint("Exiting program... Wait while closing threads and pending petitions...", Colors.FAIL)
updater.idle()
Expand Down
24 changes: 12 additions & 12 deletions youtube_md_bot/database/__init__.py
Expand Up @@ -54,26 +54,26 @@ def registerPreferences(self, user_id: int, audio_quality: str, audio_format: st
"""
self.__session.execute(query, (audio_quality, audio_format, os, should_ask_metadata, user_id))

def registerStatistics(self, user_id: int, lang: str, downloads: int, last_time_active):
def registerStatistics(self, user_id: int, lang: str, downloads: int, last_time_active: datetime):
query = """
INSERT INTO YouTubeMDApp.Statistics(lang, downloads, last_time_active, user_id) VALUES (%s, %s, %s, %s);
"""
self.__session.execute(query, (lang, downloads, last_time_active, user_id))
self.__session.execute_async(query, (lang, downloads, last_time_active, user_id))

def registerNewSong(self, file_id: str, video_id: str, audio_quality: int, audio_format: int, times_requested: int,
is_metadata_by_user: bool):
query = """
INSERT INTO YouTubeMDApp.music (file_id, video_id, audio_quality, audio_format, times_requested,
is_metadata_by_user) VALUES (%s, %s, %s, %s, %s, %s)
"""
self.__session.execute(query, (file_id, video_id, audio_quality, audio_format, times_requested,
self.__session.execute_async(query, (file_id, video_id, audio_quality, audio_format, times_requested,
is_metadata_by_user))

def registerNewPlaylist(self, playlist_id: str, number_elements: int, times_requested: int):
query = """
INSERT INTO YouTubeMDApp.playlist(playlist_id, number_elements, times_requested) VALUES (%s, %s, %s)
"""
self.__session.execute(query, (playlist_id, number_elements, times_requested))
self.__session.execute_async(query, (playlist_id, number_elements, times_requested))

def registerNewSongForPlaylist(self, playlist_id: str, file_id: str, playlist_quality: str, playlist_format: str):
query = """
Expand All @@ -87,13 +87,13 @@ def registerNewSongMetadata(self, title: str, artist: str, cover: str, duration:
INSERT INTO YouTubeMDApp.metadata(title, artist, cover, song_duration, music_file_id)
VALUES (%s, %s, %s, %s, %s)
"""
self.__session.execute(query, (title, artist, cover, duration, file_id))
self.__session.execute_async(query, (title, artist, cover, duration, file_id))

def registerNewSongInHistory(self, user_id: int, file_id: str):
query = """
INSERT INTO YouTubeMDApp.history(user_id, file_id) VALUES (%s, %s)
"""
self.__session.execute(query, (user_id, file_id))
self.__session.execute_async(query, (user_id, file_id))


class UpdateOperations(DatabaseOperationsBase):
Expand All @@ -104,7 +104,7 @@ def updateUserUsername(self, new_username: str, user_id: int):
query = """
UPDATE YouTubeMDApp.user SET username = %s WHERE user_id = %s
"""
self.__session.execute(query, (new_username, user_id))
self.__session.execute_async(query, (new_username, user_id))

def updateUserAudioQuality(self, user_id: int, audio_quality: str):
query = """
Expand Down Expand Up @@ -134,31 +134,31 @@ def updateUserLang(self, user_id: int, lang: str):
query = """
UPDATE YouTubeMDApp.statistics SET lang = %s WHERE user_id = %s
"""
self.__session.execute(query, (lang, user_id))
self.__session.execute_async(query, (lang, user_id))

def updateUserDownloads(self, user_id: int):
query = """
UPDATE YouTubeMDApp.statistics SET downloads = downloads + 1 WHERE user_id = %s
"""
self.__session.execute(query, (user_id, ))
self.__session.execute_async(query, (user_id, ))

def updateUserLastTimeActive(self, user_id: int):
query = """
UPDATE YouTubeMDApp.statistics SET last_time_active = %s WHERE user_id = %s
"""
self.__session.execute(query, (datetime.now(), user_id))
self.__session.execute_async(query, (datetime.now(), user_id))

def updatePlaylistNumberOfElements(self, playlist_id: str, number_of_elements: int):
query = """
UPDATE YouTubeMDApp.playlist SET number_elements = %s WHERE playlist_id = %s
"""
self.__session.execute(query, (number_of_elements, playlist_id))
self.__session.execute_async(query, (number_of_elements, playlist_id))

def updatePlaylistTimesRequested(self, playlist_id: str):
query = """
UPDATE YouTubeMDApp.playlist SET times_requested = times_requested + 1 WHERE playlist_id = %s
"""
self.__session.execute(query, (playlist_id, ))
self.__session.execute_async(query, (playlist_id, ))


class SelectOperations(DatabaseOperationsBase):
Expand Down
28 changes: 24 additions & 4 deletions youtube_md_bot/handlers/HelpHandler.py
@@ -1,4 +1,4 @@
from telegram import Bot, Update, ParseMode
from telegram import Bot, Update, ParseMode, InlineKeyboardMarkup, InlineKeyboardButton
from telegram.ext import run_async

from handlers import Handler
Expand All @@ -7,8 +7,28 @@
class HelpHandler(Handler):
@run_async
def help(self, bot: Bot, update: Update, args: list):
chat_id = update.message.chat_id
effective_user = update.effective_user
user_id = effective_user.id
lang = effective_user.language_code

self.__update_operations.updateUserLastTimeActive(user_id)

if len(args) == 0:
print("no args")
self.show_help_keyboard(bot=bot, user_id=user_id, lang=lang)

def show_help_keyboard(self, bot: Bot, user_id: int, lang: str, message_id: int=None):
help_message = self.__messages[lang][0]["help"]["msg"]
tt_at_button = self.__messages[lang][0]["help"]["d_via_tt-at-but"]
url_button = self.__messages[lang][0]["help"]["d_via_url-but"]
history_button = self.__messages[lang][0]["help"]["d_via_history-but"]
support_button = self.__messages[lang][0]["help"]["support_but"]

help_keyboard = InlineKeyboardMarkup([[InlineKeyboardButton(tt_at_button, callback_data="tt_at_button"),
InlineKeyboardButton(url_button, callback_data="url_button")],
[InlineKeyboardButton(history_button, callback_data="history_button"),
InlineKeyboardButton(support_button, callback_data="support_button")]])
if not message_id:
bot.sendMessage(chat_id=user_id, text=help_message, reply_markup=help_keyboard,
parse_mode=ParseMode.MARKDOWN)
else:
bot.sendMessage(chat_id, self.__messages["help"])
bot.editMessageText(help_message, chat_id=user_id, message_id=message_id, parse_mode=ParseMode.MARKDOWN)
11 changes: 8 additions & 3 deletions youtube_md_bot/handlers/StartHandler.py
@@ -1,9 +1,10 @@
from telegram import Bot, Update, ParseMode
from telegram.ext import run_async

from datetime import datetime

from handlers import Handler
from utils import Constants
from database import InsertOperations


class StartHandler(Handler):
Expand All @@ -19,11 +20,15 @@ def start(self, bot: Bot, update: Update):
user_id = effective_user.id
username = effective_user.username
name = effective_user.first_name
lang = effective_user.language_code

user_path = Constants.P_USERS_PATH + user_id + '/'
db_insert: InsertOperations = InsertOperations()
db_insert = self.__insert_operations
if not os.path.exists(user_path):
os.mkdir(user_path)
with open(user_path + Constants.P_USERS_FILE, "wb") as user_info:
pickle.dump(Constants.D_USER_DICT, user_info)
db_insert.registerNewUser(user_id=user_id, username=username, name=name)
bot.sendMessage(chat_id=user_id, text=self.__messages["msg"], parse_mode=ParseMode.MARKDOWN)
db_insert.registerStatistics(user_id, lang, 0, datetime.now())
message = self.__messages[lang][0]["welcome"][0]["msg"].format(username)
bot.sendMessage(chat_id=user_id, text=message, parse_mode=ParseMode.MARKDOWN)
6 changes: 6 additions & 0 deletions youtube_md_bot/handlers/__init__.py
@@ -1,3 +1,9 @@
from database import InsertOperations, SelectOperations, UpdateOperations


class Handler:
def __init__(self, handler_messages: dict):
self.__messages = handler_messages
self.__insert_operations: InsertOperations = InsertOperations()
self.__update_operations: UpdateOperations = UpdateOperations()
self.__select_operations: SelectOperations = SelectOperations()
11 changes: 7 additions & 4 deletions youtube_md_bot/messages/messages.json
@@ -1,5 +1,5 @@
{
"es_ES": [
"es": [
{
"welcome": [
{
Expand All @@ -8,16 +8,19 @@
],
"help": [
{
"msg": "Para descargar una canción puedes:\n ■ *Buscar* 🔎 la canción por _título y artista_, enviándoselo directamente al bot\n ■ *Enviar* directamente la _URL_ 🔗 del vídeo\n ■ Seleccionar una *canción ya descargada* desde el historial 🕒\n\n",
"more_help": "Para más ayuda, navega con los botones que aparecen debajo",
"msg": "Para descargar una canción puedes:\n ■ *Buscar* 🔎 la canción por _título y artista_, enviándoselo directamente al bot\n ■ *Enviar* directamente la _URL_ 🔗 del vídeo\n ■ Seleccionar una *canción ya descargada* desde el historial 🕒\n\nPara más ayuda, navega con los botones que aparecen debajo",
"d_via_tt-at-but": "Título y artista",
"d_via_url-but": "URL",
"d_via_history-but": "Historial",
"support_but": "Soporte",
"d_via_tt-at": "*Descarga*[ ]({})canciones enviando directamente el _título_ 🎤 y _artista_ 🗣 de la canción al bot",
"d_via_url": "Comienza[ ]({})directamente *con la descarga* enviando la URL del vídeo de YouTube\n\nPuedes usar un bot _inline_ como @vid para agilizar este proceso",
"d_via_history": "Accede[ ]({})a tu *historial* mediante el comando /history, desde donde podrás _seleccionar directamente_ la canción que quieras descargar"
}
]
}
],
"en_US": [
"en": [
{

}
Expand Down

0 comments on commit 1dce7be

Please sign in to comment.