|
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- # This program is dedicated to the public domain under the CC0 license.
- # Telegram - Betaseries
- import logging
- import requests
- import json
- from telegram import InlineKeyboardButton, InlineKeyboardMarkup
- from telegram.ext import Updater, CommandHandler, CallbackQueryHandler
- from config import config, series
- from betaseries import login_beta, get_title_only, to_see, seen, get_episode_code, what_2see, get_ep_code_series
- from telegram_api import send_message
-
- # Activer / Désactiver le debuggage {Projet : pas encore utilisé}
- DEBUG = True
-
- # Recupération de la configuration dans config.py
- client_id = config['client_id']
- login= config['login']
- password = config['password']
- user_id = config['user_id']
- token_bot = config['token_bot']
-
-
- #Debug only -> permet d'afficher les erreurs sur la console.
- logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
- level=logging.INFO)
- logger = logging.getLogger(__name__)
-
- def help(update, context):
- message = "Commandes du bot : " + '\n \n'
- message += u"/help - Permet d'afficher ce message \n"
- message += u"/start - Afficher le message d'accueil \n"
- message += u"/ping - Verifier le temps de reaction du bot /!\Parfois il se peut que ça soit l'API de Betaseries qui prenne du temps \n"
- message += u"/repeat {message} - Permet de repeter votre message + permet d'afficher votre ID dans la console \n"
- message += u"/latest - permet de voir les derniers episodes des series surveillées \n"
- message += u"/liste - permet de voir les series surveillées \n"
- message += u"/all_seen - permet de dire qu'on a vu tout les episodes d'une des series surveillées \n"
- message += u"/2see - Permet de voir les episodes que nous n'avons pas encore vu sur Betaseries \n"
- message += u"/watched - Permet de marquer un épisode comme 'vu' dans la liste de la commande /2see"
- update.message.reply_text(message)
-
-
- def start(update, context):
- message = "Bonjour, " + "\n" + "je suis un bot telegram vous permettant de marquer une serie comme 'vu' sur votre compte Betaseries" + '\n \n'
- message += u"Pour commencer à utiliser le bot, vous aurez besoin de suivre le guide. Bien que le bot répond ici : ça ne veut pas dire que toutes les fonctions sont disponibles ! " + '\n \n'
- message += u"Si vous avez le moindre problème, référez vous au guide présent ici : https://git.thoughtless.eu/Cinabre/Telegram-Betaseries" + '\n \n'
- message += u"Pour voir la liste des commandes, tapez /help"
- update.message.reply_text(message)
- return
-
- def ping(update, context):
- send_message("Pong!")
- return
-
- def init(update, context):
- update.message.reply_text("Tentative de connexion à Betaseries...")
- data = login_beta()
- if data == False :
- error = "Impossible d'interroger l'API\n Code:" + str(request.status_code)
- update.message.reply_text(error)
- return
- #Si la fonction ne renvoie pas "False", on considère que le token est bon !
-
- betauser = data
- message = "Token utilise pour Betaseries : " + betauser
-
- # à editer : nous utiliserons plutot la librairie de telegram lorsque nous répondons à une commande. l'API sera utile pour le script
- API_Message = 'https://api.telegram.org/'
- API_Message += 'bot' + token_bot + '/sendMessage?chat_id=' + user_id + '&text='
- #
-
-
- Notification = API_Message + "Connection Reussie ! "
- request = requests.post(Notification)
-
- Notification = API_Message + " Votre Token sur Betaseries: " + betauser
- request = requests.post(Notification)
- update.message.reply_text("Vous pouvez maintenant utiliser le bot !")
- print("Token Betaseries :", betauser)
- return
-
-
- def repeat(update, context):
- message = ''
- user = update.message.from_user
-
- print('Pseudo du compte : {} ID: {} '.format(user['username'], user['id']))
-
- if len(context.args) > 1 :
- for i in range(len(context.args)):
- mot = str(context.args[i]) + " "
- message += mot
- message = message[:-1]
- else :
- message = context.args[0]
-
- print("phrase envoyée : ", message)
-
-
- if message == "Tu es genial":
- update.message.reply_text("Je me trouve aussi genial !")
- return
-
- update.message.reply_text(message)
- return
-
-
- def latest(update, context):
- message = 'Ã voir : \n'
- for i in range(len(series)):
- thetvdb_id = series[i]
- episode = to_see(thetvdb_id)
-
- if episode != False:
- message += '- ' + str(episode)
- send_message(message)
-
-
- def liste(update, context):
- message = ''
- message = u'Liste des séries surveillées : ' + '\n'
- for i in range(len(series)):
- message += '- ' + get_title_only(series[i]) + '\n'
-
- message += '\n' + "Bon Visionnage !"
- send_message(message)
-
-
-
- def ive_all_seen(update, context):
- global callback
- callback = 1
- send_message(u'Selectionnez la serie dont vous avez vu le dernier episode !')
-
- if type(series) == str :
- file_path = 'latest/' + series + '.json'
- print(file_path)
- with open(file_path) as json_file:
- data = json.load(json_file)
- keyboard = [[InlineKeyboardButton(data['serie_title'] + '|' + 'S' + str(data['season ']) + 'E' + str(data['episode']), callback_data='1')]]
- reply_markup = InlineKeyboardMarkup(keyboard)
- update.message.reply_text('Vous avez vu :', reply_markup=reply_markup)
- return
-
- else :
- if len(series) == 2 :
- keyboard = [[InlineKeyboardButton(get_title_only(series[0]), callback_data='1'),
- InlineKeyboardButton(get_title_only(series[1]), callback_data='2')]]
-
- if len(series) == 3 :
- keyboard = [
- [InlineKeyboardButton(get_title_only(series[0]), callback_data='1'), InlineKeyboardButton(get_title_only(series[1]), callback_data='2')],
- [InlineKeyboardButton(get_title_only(series[2]), callback_data='3')]
- ]
- if len(series) == 4 :
- keyboard = [
- [InlineKeyboardButton(get_title_only(series[0]), callback_data='1'), InlineKeyboardButton(get_title_only(series[1]), callback_data='2') ],
- [InlineKeyboardButton(get_title_only(series[2]), callback_data='3'), InlineKeyboardButton(get_title_only(series[3]), callback_data='4') ]
- ]
- if len(series) == 5 :
- keyboard = [
- [ InlineKeyboardButton(get_title_only(series[0]), callback_data='1'), InlineKeyboardButton(get_title_only(series[1]), callback_data='2')],
- [ InlineKeyboardButton(get_title_only(series[2]), callback_data='3'), InlineKeyboardButton(get_title_only(series[3]), callback_data='4')],
- [ InlineKeyboardButton(get_title_only(series[4]), callback_data='5')]
- ]
-
-
- if len(series) == 6 :
- keyboard = [
- [ InlineKeyboardButton(get_title_only(series[0]), callback_data='1'), InlineKeyboardButton(get_title_only(series[1]), callback_data='2')],
- [ InlineKeyboardButton(get_title_only(series[2]), callback_data='3'), InlineKeyboardButton(get_title_only(series[3]), callback_data='4')],
- [ InlineKeyboardButton(get_title_only(series[4]), callback_data='5'), InlineKeyboardButton(get_title_only(series[5]), callback_data='6')]
- ]
-
- if len(series) == 7 :
- keyboard = [
- [ InlineKeyboardButton(get_title_only(series[0]), callback_data='1'), InlineKeyboardButton(get_title_only(series[1]), callback_data='2')],
- [ InlineKeyboardButton(get_title_only(series[2]), callback_data='3'), InlineKeyboardButton(get_title_only(series[3]), callback_data='4')],
- [ InlineKeyboardButton(get_title_only(series[4]), callback_data='5'), InlineKeyboardButton(get_title_only(series[5]), callback_data='6')],
- [ InlineKeyboardButton(get_title_only(series[6]), callback_data='7')]
- ]
- if len(series) == 8 :
- keyboard = [
- [ InlineKeyboardButton(get_title_only(series[0]), callback_data='1'), InlineKeyboardButton(get_title_only(series[1]), callback_data='2')],
- [ InlineKeyboardButton(get_title_only(series[2]), callback_data='3'), InlineKeyboardButton(get_title_only(series[3]), callback_data='4')],
- [ InlineKeyboardButton(get_title_only(series[4]), callback_data='5'), InlineKeyboardButton(get_title_only(series[5]), callback_data='6')],
- [ InlineKeyboardButton(get_title_only(series[6]), callback_data='7'), InlineKeyboardButton(get_title_only(series[7]), callback_data='8')]
- ]
- if len(series) == 9 :
- keyboard = [
- [ InlineKeyboardButton(get_title_only(series[0]), callback_data='1'), InlineKeyboardButton(get_title_only(series[1]), callback_data='2')],
- [ InlineKeyboardButton(get_title_only(series[2]), callback_data='3'), InlineKeyboardButton(get_title_only(series[3]), callback_data='4')],
- [ InlineKeyboardButton(get_title_only(series[4]), callback_data='5'), InlineKeyboardButton(get_title_only(series[5]), callback_data='6')],
- [ InlineKeyboardButton(get_title_only(series[6]), callback_data='7'), InlineKeyboardButton(get_title_only(series[7]), callback_data='8')],
- [ InlineKeyboardButton(get_title_only(series[8]), callback_data='9')]
- ]
- if len(series) == 10 :
- keyboard = [
- [ InlineKeyboardButton(get_title_only(series[0]), callback_data='1'), InlineKeyboardButton(get_title_only(series[1]), callback_data='2')],
- [ InlineKeyboardButton(get_title_only(series[2]), callback_data='3'), InlineKeyboardButton(get_title_only(series[3]), callback_data='4')],
- [ InlineKeyboardButton(get_title_only(series[4]), callback_data='5'), InlineKeyboardButton(get_title_only(series[5]), callback_data='6')],
- [ InlineKeyboardButton(get_title_only(series[6]), callback_data='7'), InlineKeyboardButton(get_title_only(series[7]), callback_data='8')],
- [ InlineKeyboardButton(get_title_only(series[8]), callback_data='9'), InlineKeyboardButton(get_title_only(series[9]), callback_data='10') ]
- ]
-
- reply_markup = InlineKeyboardMarkup(keyboard)
- update.message.reply_text('Selectionnez une reponse', reply_markup=reply_markup)
-
- return
-
-
-
- def button(update, context):
- query = update.callback_query
- query.answer()
- # Si jamais l'utilisateur fait le 1er choix, on vérifie si jamais 'series' n'est pas un str (qui serait donc le cas ou l'utilisateur n'a qu'une serie
- if callback == 1:
- if query['data'] == u'1' :
- if type(series) == str :
- seen(series, 'latest')
- episode = get_title_only(series) + ' | ' + get_episode_code(series)
- query.edit_message_text(text="Choix de la series : {}".format(episode))
- return
- else :
- seen(series[0], 'latest')
- episode = get_title_only(series[0]) + ' | ' + get_episode_code(series[0])
- query.edit_message_text(text="Choix de la series : {}".format(episode))
- return
-
- number = int(query['data']) - 1
- seen(series[number], 'latest')
- episode = get_title_only(series[number]) + ' | ' + get_episode_code(series[number])
- query.edit_message_text(text="Choix de la series : {}".format(episode))
- return
- if callback == 2 :
- with open(query['data']) as json_file:
- data = json.load(json_file)
- message = u"episode que vous venez de marquer comme 'vu' : " + '\n' + data["title"] + " - S" + str(data['season']) + "E" + str(data['episode']) + " ID: " + str(data['id'])
-
- with open(query['data'], 'r') as episode_file:
- episode = json.load(episode_file)
-
- seen(episode[u'id'], 'watched')
- query.edit_message_text(text=message)
- what_2see()
-
-
- def what2see(update, context):
- send_message("Voici la liste des épisodes que vous devez voir :")
- message = what_2see()
- send_message(message)
- return
-
-
- def watched(update, context):
- global callback
- callback = 2
-
- list=[]
- file=[]
- with open('cache_to_see.json', 'r') as list_file:
- list = json.load(list_file)
-
- for i in range(len(list)) :
- file_path = 'series/' + list[i] + '.json'
- file.append(file_path)
- longueur = int(len(list))
- print("Longueur de la liste : ", longueur)
-
- if longueur == 2 :
- choix = [
- [ InlineKeyboardButton(get_ep_code_series(file[0]), callback_data=file[0]), InlineKeyboardButton(get_ep_code_series(file[1]), callback_data=file[1])]
- ]
- if longueur == 3 :
- choix = [
- [ InlineKeyboardButton(get_ep_code_series(file[0]), callback_data=file[0]), InlineKeyboardButton(get_ep_code_series(file[1]), callback_data=file[1])],
- [ InlineKeyboardButton(get_ep_code_series(file[2]), callback_data=file[2])]
- ]
- if longueur == 4 :
- choix = [
- [ InlineKeyboardButton(get_ep_code_series(file[0]), callback_data=file[0]), InlineKeyboardButton(get_ep_code_series(file[1]), callback_data=file[1])],
- [ InlineKeyboardButton(get_ep_code_series(file[2]), callback_data=file[2]), InlineKeyboardButton(get_ep_code_series(file[3]), callback_data=file[3])]
- ]
- if longueur == 5 :
- choix = [
- [ InlineKeyboardButton(get_ep_code_series(file[0]), callback_data=file[0]), InlineKeyboardButton(get_ep_code_series(file[1]), callback_data=file[1])],
- [ InlineKeyboardButton(get_ep_code_series(file[2]), callback_data=file[2]), InlineKeyboardButton(get_ep_code_series(file[3]), callback_data=file[3])],
- [ InlineKeyboardButton(get_ep_code_series(file[4]), callback_data=file[4])]
- ]
- if longueur == 6 :
- choix = [
- [ InlineKeyboardButton(get_ep_code_series(file[0]), callback_data=file[0]), InlineKeyboardButton(get_ep_code_series(file[1]), callback_data=file[1])],
- [ InlineKeyboardButton(get_ep_code_series(file[2]), callback_data=file[2]), InlineKeyboardButton(get_ep_code_series(file[3]), callback_data=file[3])],
- [ InlineKeyboardButton(get_ep_code_series(file[4]), callback_data=file[4]), InlineKeyboardButton(get_ep_code_series(file[5]), callback_data=file[5])]
- ]
- if longueur == 7 :
- choix = [
- [ InlineKeyboardButton(get_ep_code_series(file[0]), callback_data=file[0]), InlineKeyboardButton(get_ep_code_series(file[1]), callback_data=file[1])],
- [ InlineKeyboardButton(get_ep_code_series(file[2]), callback_data=file[2]), InlineKeyboardButton(get_ep_code_series(file[3]), callback_data=file[3])],
- [ InlineKeyboardButton(get_ep_code_series(file[4]), callback_data=file[4]), InlineKeyboardButton(get_ep_code_series(file[5]), callback_data=file[5])],
- [ InlineKeyboardButton(get_ep_code_series(file[6]), callback_data=file[6])]
- ]
- if longueur == 8 :
- choix = [
- [ InlineKeyboardButton(get_ep_code_series(file[0]), callback_data=file[0]), InlineKeyboardButton(get_ep_code_series(file[1]), callback_data=file[1])],
- [ InlineKeyboardButton(get_ep_code_series(file[2]), callback_data=file[2]), InlineKeyboardButton(get_ep_code_series(file[3]), callback_data=file[3])],
- [ InlineKeyboardButton(get_ep_code_series(file[4]), callback_data=file[4]), InlineKeyboardButton(get_ep_code_series(file[5]), callback_data=file[5])],
- [ InlineKeyboardButton(get_ep_code_series(file[6]), callback_data=file[6]), InlineKeyboardButton(get_ep_code_series(file[7]), callback_data=file[7])]
- ]
- if longueur == 9 :
- choix = [
- [ InlineKeyboardButton(get_ep_code_series(file[0]), callback_data=file[0]), InlineKeyboardButton(get_ep_code_series(file[1]), callback_data=file[1])],
- [ InlineKeyboardButton(get_ep_code_series(file[2]), callback_data=file[2]), InlineKeyboardButton(get_ep_code_series(file[3]), callback_data=file[3])],
- [ InlineKeyboardButton(get_ep_code_series(file[4]), callback_data=file[4]), InlineKeyboardButton(get_ep_code_series(file[5]), callback_data=file[5])],
- [ InlineKeyboardButton(get_ep_code_series(file[6]), callback_data=file[6]), InlineKeyboardButton(get_ep_code_series(file[7]), callback_data=file[7])],
- [ InlineKeyboardButton(get_ep_code_series(file[8]), callback_data=file[8])]
- ]
- if longueur == 10 :
- choix = [
- [ InlineKeyboardButton(get_ep_code_series(file[0]), callback_data=file[0]), InlineKeyboardButton(get_ep_code_series(file[1]), callback_data=file[1])],
- [ InlineKeyboardButton(get_ep_code_series(file[2]), callback_data=file[2]), InlineKeyboardButton(get_ep_code_series(file[3]), callback_data=file[3])],
- [ InlineKeyboardButton(get_ep_code_series(file[4]), callback_data=file[4]), InlineKeyboardButton(get_ep_code_series(file[5]), callback_data=file[5])],
- [ InlineKeyboardButton(get_ep_code_series(file[6]), callback_data=file[6]), InlineKeyboardButton(get_ep_code_series(file[7]), callback_data=file[7])],
- [ InlineKeyboardButton(get_ep_code_series(file[8]), callback_data=file[8]), InlineKeyboardButton(get_ep_code_series(file[9]), callback_data=file[9]) ]
- ]
- if longueur > 10 or longueur == 1 :
- send_message("Un probleme est survenu lors de l'interrogation de la liste")
- send_message("Longueur de la liste : ")
- send_message(str(longueur))
- send_message(str(type(longueur)))
- return
- reply_markup = InlineKeyboardMarkup(choix)
- update.message.reply_text("Selectionnez l'episode que vous avez vu", reply_markup=reply_markup)
-
-
-
-
-
- def main():
- updater = Updater(token_bot, use_context=True)
- print("Bot connecté")
- dp = updater.dispatcher
-
-
- dp.add_handler(CommandHandler("start", start))
- dp.add_handler(CommandHandler("help", help))
-
-
- dp.add_handler(CommandHandler("ping", ping))
-
- dp.add_handler(CommandHandler("repeat", repeat,
- pass_args=True,
- pass_job_queue=True,
- pass_chat_data=True))
-
- dp.add_handler(CommandHandler("initialisation", init,
- pass_args=True,
- pass_job_queue=True,
- pass_chat_data=True))
-
- dp.add_handler(CommandHandler("liste", liste))
-
- dp.add_handler(CommandHandler("latest", latest))
-
- dp.add_handler(CommandHandler("all_seen", ive_all_seen))
- updater.dispatcher.add_handler(CallbackQueryHandler(button))
-
- dp.add_handler(CommandHandler("2see", what2see))
-
-
- dp.add_handler(CommandHandler("watched", watched))
-
-
- updater.start_polling()
- updater.idle()
-
-
- if __name__ == '__main__':
- main()
|