Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.

314 wiersze
13 KiB

  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. # This program is dedicated to the public domain under the CC0 license.
  4. # Telegram - Betaseries
  5. import logging
  6. import requests
  7. import json
  8. from telegram import InlineKeyboardButton, InlineKeyboardMarkup
  9. from telegram.ext import Updater, CommandHandler, CallbackQueryHandler
  10. from config import config, series
  11. from betaseries import login_beta, get_title_only, to_see, seen, get_episode_code, what_2see, get_ep_code_series
  12. from telegram_api import send_message
  13. # Activer / Désactiver le debuggage {Projet : pas encore utilisé}
  14. DEBUG = True
  15. # Recupération de la configuration dans config.py
  16. client_id = config['client_id']
  17. login= config['login']
  18. password = config['password']
  19. user_id = config['user_id']
  20. token_bot = config['token_bot']
  21. #Debug only -> permet d'afficher les erreurs sur la console.
  22. logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
  23. level=logging.INFO)
  24. logger = logging.getLogger(__name__)
  25. def start(update, context):
  26. send_message('Bonjour Sensei. !')
  27. send_message('Je suis ici pour te servir, malgré ça : je reste en Beta ! Soyez doux.')
  28. return
  29. def ping(update, context):
  30. send_message("Pong!")
  31. return
  32. def init(update, context):
  33. update.message.reply_text("Tentative de connexion à Betaseries...")
  34. data = login_beta()
  35. if data == False :
  36. error = "Impossible d'interroger l'API\n Code:" + str(request.status_code)
  37. update.message.reply_text(error)
  38. return
  39. #Si la fonction ne renvoie pas "False", on considère que le token est bon !
  40. betauser = data
  41. message = "Token utilise pour Betaseries : " + betauser
  42. # à editer : nous utiliserons plutot la librairie de telegram lorsque nous répondons à une commande. l'API sera utile pour le script
  43. API_Message = 'https://api.telegram.org/'
  44. API_Message += 'bot' + token_bot + '/sendMessage?chat_id=' + user_id + '&text='
  45. #
  46. Notification = API_Message + "Connection Reussie ! "
  47. request = requests.post(Notification)
  48. Notification = API_Message + " Votre Token sur Betaseries: " + betauser
  49. request = requests.post(Notification)
  50. update.message.reply_text("Vous pouvez maintenant utiliser le bot !")
  51. print("Token Betaseries :", betauser)
  52. return
  53. def repeat(update, context):
  54. message = ''
  55. user = update.message.from_user
  56. if DEBUG == True :
  57. print('Pseudo du compte : {} ID: {} '.format(user['username'], user['id']))
  58. if len(context.args) > 1 :
  59. for i in range(len(context.args)):
  60. mot = str(context.args[i]) + " "
  61. message += mot
  62. message = message[:-1]
  63. else :
  64. message = context.args[0]
  65. if DEBUG == True :
  66. print("phrase envoyée : ", message)
  67. if message == "Cinabre est parfait":
  68. update.message.reply_text("J'avoue !")
  69. return
  70. update.message.reply_text(message)
  71. return
  72. def latest(update, context):
  73. message = 'à voir : \n'
  74. for i in range(len(series)):
  75. thetvdb_id = series[i]
  76. episode = to_see(thetvdb_id)
  77. if episode != False:
  78. message += '- ' + str(episode)
  79. send_message(message)
  80. def liste(update, context):
  81. message = ''
  82. message = u'Liste des séries surveillées : ' + '\n'
  83. for i in range(len(series)):
  84. message += '- ' + get_title_only(series[i]) + '\n'
  85. message += '\n' + "Bon Visionnage !"
  86. send_message(message)
  87. def ive_all_seen(update, context):
  88. global callback
  89. callback = 1
  90. send_message(u'Selectionnez la serie dont vous avez vu le dernier episode !')
  91. if type(series) == str :
  92. file_path = 'latest/' + series + '.json'
  93. print(file_path)
  94. with open(file_path) as json_file:
  95. data = json.load(json_file)
  96. keyboard = [[InlineKeyboardButton(data['serie_title'] + '|' + 'S' + str(data['season ']) + 'E' + str(data['episode']), callback_data='1')]]
  97. reply_markup = InlineKeyboardMarkup(keyboard)
  98. update.message.reply_text('Vous avez vu :', reply_markup=reply_markup)
  99. return
  100. else :
  101. if len(series) == 2 :
  102. keyboard = [[InlineKeyboardButton(get_title_only(series[0]), callback_data='1'),
  103. InlineKeyboardButton(get_title_only(series[1]), callback_data='2')]]
  104. if len(series) == 3 :
  105. keyboard = [
  106. [InlineKeyboardButton(get_title_only(series[0]), callback_data='1'), InlineKeyboardButton(get_title_only(series[1]), callback_data='2')],
  107. [InlineKeyboardButton(get_title_only(series[2]), callback_data='3')]
  108. ]
  109. if len(series) == 4 :
  110. keyboard = [
  111. [InlineKeyboardButton(get_title_only(series[0]), callback_data='1'), InlineKeyboardButton(get_title_only(series[1]), callback_data='2') ],
  112. [InlineKeyboardButton(get_title_only(series[2]), callback_data='3'), InlineKeyboardButton(get_title_only(series[3]), callback_data='4') ]
  113. ]
  114. if len(series) == 5 :
  115. keyboard = [
  116. [ InlineKeyboardButton(get_title_only(series[0]), callback_data='1'), InlineKeyboardButton(get_title_only(series[1]), callback_data='2')],
  117. [ InlineKeyboardButton(get_title_only(series[2]), callback_data='3'), InlineKeyboardButton(get_title_only(series[3]), callback_data='4')],
  118. [ InlineKeyboardButton(get_title_only(series[4]), callback_data='5')]
  119. ]
  120. if len(series) == 6 :
  121. keyboard = [
  122. [ InlineKeyboardButton(get_title_only(series[0]), callback_data='1'), InlineKeyboardButton(get_title_only(series[1]), callback_data='2')],
  123. [ InlineKeyboardButton(get_title_only(series[2]), callback_data='3'), InlineKeyboardButton(get_title_only(series[3]), callback_data='4')],
  124. [ InlineKeyboardButton(get_title_only(series[4]), callback_data='5'), InlineKeyboardButton(get_title_only(series[5]), callback_data='6')]
  125. ]
  126. if len(series) == 7 :
  127. keyboard = [
  128. [ InlineKeyboardButton(get_title_only(series[0]), callback_data='1'), InlineKeyboardButton(get_title_only(series[1]), callback_data='2')],
  129. [ InlineKeyboardButton(get_title_only(series[2]), callback_data='3'), InlineKeyboardButton(get_title_only(series[3]), callback_data='4')],
  130. [ InlineKeyboardButton(get_title_only(series[4]), callback_data='5'), InlineKeyboardButton(get_title_only(series[5]), callback_data='6')],
  131. [ InlineKeyboardButton(get_title_only(series[6]), callback_data='7')]
  132. ]
  133. if len(series) == 8 :
  134. keyboard = [
  135. [ InlineKeyboardButton(get_title_only(series[0]), callback_data='1'), InlineKeyboardButton(get_title_only(series[1]), callback_data='2')],
  136. [ InlineKeyboardButton(get_title_only(series[2]), callback_data='3'), InlineKeyboardButton(get_title_only(series[3]), callback_data='4')],
  137. [ InlineKeyboardButton(get_title_only(series[4]), callback_data='5'), InlineKeyboardButton(get_title_only(series[5]), callback_data='6')],
  138. [ InlineKeyboardButton(get_title_only(series[6]), callback_data='7'), InlineKeyboardButton(get_title_only(series[7]), callback_data='8')]
  139. ]
  140. if len(series) == 9 :
  141. keyboard = [
  142. [ InlineKeyboardButton(get_title_only(series[0]), callback_data='1'), InlineKeyboardButton(get_title_only(series[1]), callback_data='2')],
  143. [ InlineKeyboardButton(get_title_only(series[2]), callback_data='3'), InlineKeyboardButton(get_title_only(series[3]), callback_data='4')],
  144. [ InlineKeyboardButton(get_title_only(series[4]), callback_data='5'), InlineKeyboardButton(get_title_only(series[5]), callback_data='6')],
  145. [ InlineKeyboardButton(get_title_only(series[6]), callback_data='7'), InlineKeyboardButton(get_title_only(series[7]), callback_data='8')],
  146. [ InlineKeyboardButton(get_title_only(series[8]), callback_data='9')]
  147. ]
  148. if len(series) == 10 :
  149. keyboard = [
  150. [ InlineKeyboardButton(get_title_only(series[0]), callback_data='1'), InlineKeyboardButton(get_title_only(series[1]), callback_data='2')],
  151. [ InlineKeyboardButton(get_title_only(series[2]), callback_data='3'), InlineKeyboardButton(get_title_only(series[3]), callback_data='4')],
  152. [ InlineKeyboardButton(get_title_only(series[4]), callback_data='5'), InlineKeyboardButton(get_title_only(series[5]), callback_data='6')],
  153. [ InlineKeyboardButton(get_title_only(series[6]), callback_data='7'), InlineKeyboardButton(get_title_only(series[7]), callback_data='8')],
  154. [ InlineKeyboardButton(get_title_only(series[8]), callback_data='9'), InlineKeyboardButton(get_title_only(series[9]), callback_data='10') ]
  155. ]
  156. reply_markup = InlineKeyboardMarkup(keyboard)
  157. update.message.reply_text('Selectionnez une reponse', reply_markup=reply_markup)
  158. return
  159. def button(update, context):
  160. query = update.callback_query
  161. query.answer()
  162. # 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
  163. if callback == 1:
  164. if query['data'] == u'1' :
  165. if type(series) == str :
  166. seen(series)
  167. episode = get_title_only(series) + ' | ' + get_episode_code(series)
  168. query.edit_message_text(text="Choix de la series : {}".format(episode))
  169. return
  170. else :
  171. seen(series[0])
  172. episode = get_title_only(series[0]) + ' | ' + get_episode_code(series[0])
  173. query.edit_message_text(text="Choix de la series : {}".format(episode))
  174. return
  175. number = int(query['data']) - 1
  176. seen(series[number])
  177. episode = get_title_only(series[number]) + ' | ' + get_episode_code(series[number])
  178. query.edit_message_text(text="Choix de la series : {}".format(episode))
  179. return
  180. if callback == 2 :
  181. with open(query['data']) as json_file:
  182. data = json.load(json_file)
  183. message = data["title"] + " - S" + str(data['season']) + "E" + str(data['episode']) + " ID: " + str(data['id'])
  184. send_message(message)
  185. query.edit_message_text(text=query['data'])
  186. def what2see(update, context):
  187. send_message("Voici la liste des épisodes que vous devez voir :")
  188. message = what_2see()
  189. send_message(message)
  190. return
  191. def watched(update, context):
  192. global callback
  193. callback = 2
  194. list=[]
  195. file=[]
  196. with open('cache_to_see.json', 'r') as list_file:
  197. list = json.load(list_file)
  198. for i in range(len(list)) :
  199. file_path = 'series/' + list[i] + '.json'
  200. file.append(file_path)
  201. if len(list) == 10 :
  202. choix = [
  203. [ InlineKeyboardButton(get_ep_code_series(file[0]), callback_data=file[0]), InlineKeyboardButton(get_ep_code_series(file[1]), callback_data=file[1])],
  204. [ InlineKeyboardButton(get_ep_code_series(file[2]), callback_data=file[2]), InlineKeyboardButton(get_ep_code_series(file[3]), callback_data=file[3])],
  205. [ InlineKeyboardButton(get_ep_code_series(file[4]), callback_data=file[4]), InlineKeyboardButton(get_ep_code_series(file[5]), callback_data=file[5])],
  206. [ InlineKeyboardButton(get_ep_code_series(file[6]), callback_data=file[6]), InlineKeyboardButton(get_ep_code_series(file[7]), callback_data=file[7])],
  207. [ InlineKeyboardButton(get_ep_code_series(file[8]), callback_data=file[8]), InlineKeyboardButton(get_ep_code_series(file[9]), callback_data=file[9]) ]
  208. ]
  209. reply_markup = InlineKeyboardMarkup(choix)
  210. update.message.reply_text('Selectionnez une reponse', reply_markup=reply_markup)
  211. def main():
  212. updater = Updater(token_bot, use_context=True)
  213. print("Bot connecté")
  214. dp = updater.dispatcher
  215. dp.add_handler(CommandHandler("start", start))
  216. dp.add_handler(CommandHandler("help", start))
  217. dp.add_handler(CommandHandler("ping", ping))
  218. dp.add_handler(CommandHandler("repeat", repeat,
  219. pass_args=True,
  220. pass_job_queue=True,
  221. pass_chat_data=True))
  222. dp.add_handler(CommandHandler("initialisation", init,
  223. pass_args=True,
  224. pass_job_queue=True,
  225. pass_chat_data=True))
  226. dp.add_handler(CommandHandler("liste", liste))
  227. dp.add_handler(CommandHandler("latest", latest))
  228. dp.add_handler(CommandHandler("all_seen", ive_all_seen))
  229. updater.dispatcher.add_handler(CallbackQueryHandler(button))
  230. dp.add_handler(CommandHandler("2see", what2see))
  231. dp.add_handler(CommandHandler("watched", watched))
  232. updater.start_polling()
  233. updater.idle()
  234. if __name__ == '__main__':
  235. main()