Beispiel #1
0
def db_cleanup():
    # Movie cleanup
    aprint('Cleaning up movies...', 'NOTIFICATOR')
    movies = Movie.select().order_by(Movie.title)
    n_movies = len(movies)
    for movie in movies:
        deletion = Movie.delete().where(Movie.imdb == movie.imdb,
                                        Movie.quality == movie.quality)
        deletion.execute()
    aprint('Deleted {} movies.'.format(n_movies), 'NOTIFICATOR')

    # TV cleanup
    aprint('Cleaning up tv shows...', 'NOTIFICATOR')
    episodes = Show.select().order_by(Show.series).order_by(
        Show.season).order_by(Show.episode)
    n_episodes = len(episodes)
    for episode in episodes:
        deletion = Show.delete().where(Show.series == episode.series,
                                       Show.season == episode.season,
                                       Show.episode == episode.episode)
        deletion.execute()
    aprint('Deleted {} episodes.'.format(n_episodes), 'NOTIFICATOR')

    # Tracks cleanup
    aprint('Cleaning up tracks...', 'NOTIFICATOR')
    tracks = Track.select().order_by(Track.artist).order_by(Track.tracknumber)
    n_tracks = len(tracks)
    for track in tracks:
        deletion = Track.delete().where(Track.artist == track.artist,
                                        Track.title == track.title,
                                        Track.tracknumber == track.tracknumber,
                                        Track.quality == track.quality)
        deletion.execute()
    aprint('Deleted {} tracks.'.format(n_tracks), 'NOTIFICATOR')
Beispiel #2
0
    def webhook():
        from models import User, Track

        update = telegram.update.Update.de_json(request.get_json(force=True),
                                                bot)

        if update.effective_user is None:
            # TODO: I want exit automatically from channel
            return 'OK'

        command = update.message.text
        chat_id = update.message.chat_id
        chat_username = update.message.from_user.username

        standard_keyboard = ReplyKeyboardMarkup(keyboard=[[
            KeyboardButton(text='track'),
            KeyboardButton(text='list')
        ], [KeyboardButton(text='delete'),
            KeyboardButton(text='info')]],
                                                resize_keyboard=True)

        new_message = 'Non ho capito, usa info per avere informazioni.'
        # keyboard = ReplyKeyboardRemove()
        keyboard = None
        disable_web_page_preview = False

        user = User.query.filter_by(chat_id=chat_id).first()
        if not user:
            user = User(chat_id=chat_id,
                        state='creation',
                        chat_username=chat_username)
            user.save()

        if not command:
            new_message = 'tipo di messaggio non supportato'
        elif command == 'cancel':
            if user.state == 'delete':
                new_message = 'eliminazione annullata'
            elif user.state == 'track':
                new_message = 'track annullata'
            elif user.state == 'track_name':
                track = Track.query.filter_by(user=user, name='temp').first()
                track.delete()
                new_message = 'track annullata'
            keyboard = standard_keyboard
            user.state = 'cancel'
        elif user.state == 'track':
            if command[:20] == 'https://www.g2a.com/':
                if command.find('?') != -1:
                    command = command[:command.find('?')]
                url = command
                game_id = url[-14:]
                response = requests.get(url=G2A_URL + game_id, cookies=COOKIES)
                data = response.json()
                if len(data):
                    new_price = float(data['lowest_price'])
                    track = Track(name='temp',
                                  game_id=game_id,
                                  game_link=url + '?mkey=' + G2A_KEY,
                                  game_price=new_price,
                                  game_median_price=new_price,
                                  user=user)
                    track.save()
                    user.state = 'track_name'
                    new_message = 'Con che nome lo vuoi salvare?'
                else:
                    new_message = 'Link non valido'
            else:
                new_message = 'Link non valido'
        elif user.state == 'track_name':
            track = Track.query.filter_by(name=command, user=user).first()
            if track:
                new_message = 'Nome non valido'
            else:
                track = Track.query.filter_by(name='temp', user=user).first()
                # TODO: if track is None?
                track.name = command
                user.state = 'track_finish'
                track.save()
                new_message = 'Track salvato'
                keyboard = standard_keyboard
        elif user.state == 'delete':
            track = Track.query.filter_by(user=user, name=command).first()
            if track:
                track.delete()
                user.state = 'delete_finish'
                new_message = 'Track Eliminato'
                keyboard = standard_keyboard
            else:
                new_message = 'Nome non valido'
        elif command == 'track':
            user.state = 'track'
            new_message = 'Inserisci il link di g2a'
            keyboard = ReplyKeyboardMarkup(
                keyboard=[[KeyboardButton(text='cancel')]],
                resize_keyboard=True)
        elif command == 'delete':
            tracks = Track.query.filter_by(user=user).all()
            if len(tracks):
                command_list = []
                for track in tracks:
                    command_list.append([KeyboardButton(text=track.name)])
                command_list.append([KeyboardButton(text='cancel')])
                user.state = 'delete'
                new_message = 'Cosa vuoi eliminare?'
                keyboard = ReplyKeyboardMarkup(keyboard=command_list,
                                               resize_keyboard=True)
            else:
                new_message = 'Nessun gioco in lista'
                user.state = 'delete_empty'
        elif command == 'list':
            tracks = Track.query.filter_by(user=user).all()
            if len(tracks):
                new_message = 'Lista dei Track: \n\n'
                for track in tracks:
                    new_message += 'Name: <a href="' + track.game_link + '">' + track.name + '</a>\n'
                    new_message += 'Price: ' + str(track.game_price) + '\n'
                    new_message += '\n'
                user.state = 'list'
                disable_web_page_preview = True
            else:
                new_message = 'Nessun gioco in lista'
                user.state = 'list_empty'
        elif command == 'info' or command == '/start':
            user.state = 'info'
            new_message = 'Benvenuto nel bot \n\n'
            new_message += 'Comandi: \n'
            new_message += 'track - aggiunge il link del gioco alla tua lista \n'
            new_message += 'list - mostra i giochi della tua lista \n'
            new_message += 'delete - cancella elementi dalla tua lista \n\n'
            new_message += 'Se hai problemi o vuoi segnalarmi bug scrivimi a @matteo_baldelli \n'
            new_message += '<a href="https://www.paypal.me/MatteoBaldelli">Donate</a> \n'
            new_message += '<a href="https://telegram.me/storebot?start=g2apricebot">Rate me</a>'
            keyboard = standard_keyboard
            disable_web_page_preview = True
        else:
            user.state = 'error'
            keyboard = standard_keyboard

        user.save()
        try:
            bot.send_message(
                chat_id,
                new_message,
                parse_mode='HTML',
                disable_web_page_preview=disable_web_page_preview,
                reply_markup=keyboard,
            )
        except Unauthorized:
            user.delete()
        return 'OK'