-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.py
109 lines (78 loc) · 2.86 KB
/
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
import logging
import os
from telegram import InlineKeyboardButton, InlineKeyboardMarkup, Update
from telegram.ext import (
Updater,
CommandHandler,
CallbackQueryHandler,
CallbackContext,
ConversationHandler
)
from telegram.ext.filters import Filters
from telegram.ext.messagehandler import MessageHandler
from scorebat import (
prepare_api_links,
prepare_youtube_videos,
find_games_per_team,
find_teams_per_country
)
logging.basicConfig(
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO
)
logger = logging.getLogger(__name__)
COUNTRY, TEAM = range(2)
COUNTRIES = [
'SPAIN',
'GERMANY',
'ENGLAND'
]
PORT = int(os.environ.get('PORT', '8443'))
TOKEN = os.environ.get('TOKEN', '')
def start(update: Update, _: CallbackContext) -> int:
logger.info(f"started for {update.message.from_user['username']}")
keyboard = []
for country in COUNTRIES:
keyboard.append(InlineKeyboardButton(country, callback_data=country))
reply_markup = InlineKeyboardMarkup([keyboard])
update.message.reply_text('Country?', reply_markup=reply_markup)
return COUNTRY
def country_selected(update: Update, context: CallbackContext) -> int:
logger.info(f"country selected: {update.callback_query.data}")
query = update.callback_query
games, teams = find_teams_per_country(query.data)
context.user_data['games'] = games
query.answer()
keyboard = []
for team in teams:
keyboard.append(InlineKeyboardButton(team, callback_data=team))
reply_markup = InlineKeyboardMarkup.from_column(keyboard)
query.edit_message_text('Team?', reply_markup=reply_markup)
return TEAM
def team_selected(update: Update, context: CallbackContext) -> int:
logger.info(f"team selected: {update.callback_query.data}")
query = update.callback_query
games = find_games_per_team(context.user_data['games'], query.data)
apis = prepare_api_links(games)
videos = prepare_youtube_videos(apis)
query.answer()
query.edit_message_text("\n".join(videos))
return ConversationHandler.END
def help_command(update: Update, _: CallbackContext) -> None:
update.message.reply_text('Use /start to test this bot.')
def main():
updater = Updater(TOKEN)
conv_handler = ConversationHandler(
entry_points=[CommandHandler('start', start)],
states={
COUNTRY: [CallbackQueryHandler(country_selected)],
TEAM: [CallbackQueryHandler(team_selected)],
},
fallbacks=[MessageHandler(Filters.text, help_command)],
)
updater.dispatcher.add_handler(conv_handler)
logger.info(f"Starting webhook on PORT {PORT}")
updater.start_webhook(listen="0.0.0.0", port=PORT, url_path=TOKEN)
updater.bot.setWebhook(f"https://voetbot.herokuapp.com/{TOKEN}")
updater.idle()
if __name__ == '__main__':
main()