Profilo di KeyMan98

Nome KeyMan98
Indirizzo email n/a
Messaggi6
  • Problemi con bot telegram
    Forum >> Programmazione Python >> Web e Reti
    Un paio di mesi fa ho creato un bot. Fino a qualche giorno fa ha funzionato perfettamente, poi si è bloccato per magia. Dopo diversi tentativi ho scoperto che, mettendo i bot nel canale che gestisco, si impallano definitivamente e danno errore all'infinito.
    Ecco il codice:

    import telepot
    import time

    bot = telepot.Bot("token")

    def handle(msg):
    content_type, chat_type, chat_id = telepot.glance(msg) # restituisce 3 variabili: content_type, chat_type, chat_id
    print(content_type, chat_type, chat_id)

    nome = msg['from']['first_name']

    if content_type == 'text':
    bot.sendMessage(chat_id, 'Ciao %s, mandami un video a cui applicare la didascalia...\nIl nome della didascalia verrà preso dal nome originale del file' % nome)

    if content_type == 'video' and chat_id == mio id:
    file_id = msg['video']['file_id']
    file_name = msg['video']['file_name']

    chat_id, message_id = telepot.message_identifier(msg)
    print(chat_id, message_id)

    bot.sendVideo(chat_id='@canale',
    video=file_id,
    duration=None,
    height=None,
    caption=file_name,
    parse_mode=None,
    supports_streaming=True,
    disable_notification=None,
    reply_to_message_id=None,
    reply_markup=None)

    if content_type == 'video' and chat_id != il mio id:
    file_id = msg['video']['file_id']
    file_name = msg['video']['file_name']

    chat_id, message_id = telepot.message_identifier(msg)
    print(chat_id, message_id)

    bot.sendVideo(chat_id,
    video=file_id,
    duration=None,
    height=None,
    caption=file_name,
    parse_mode=None,
    supports_streaming=True,
    disable_notification=None,
    reply_to_message_id=None,
    reply_markup=None)


    bot.message_loop(handle)

    while 1:
    time.sleep(3)Ecco l'errore:

    Traceback (most recent call last):
      File "C:\Users\GianmarcoAppData\Local\Programs\Python\Python38\lib\site-packages\telepot\__init__.py", line 1191, in get_from_telegram_server
        offset = max([relay_to_collector(update) for update in result]) + 1
      File "C:\Users\GianmarcoAppData\Local\Programs\Python\Python38\lib\site-packages\telepot\__init__.py", line 1191, in <listcomp>
        offset = max([relay_to_collector(update) for update in result]) + 1
      File "C:\Users\GianmarcoAppData\Local\Programs\Python\Python38\lib\site-packages\telepot\__init__.py", line 1164, in relay_to_collector
        key = _find_first_key(update, ['message',
      File "C:\Users\GianmarcoAppData\Local\Programs\Python\Python38\lib\site-packages\telepot\__init__.py", line 68, in _find_first_key
        raise KeyError('No suggested keys %s in %s' % (str(keys), str(d)))
    KeyError: "No suggested keys ['message', 'edited_message', 'channel_post', 'edited_channel_post', 'callback_query', 'inline_query', 'chosen_inline_result', 'shipping_query', 'pre_checkout_query'] in {'update_id': 360389344, 'my_chat_member': {'chat': {'id': -1001342579018, 'title': 'canale', 'username': 'canale', 'type': 'channel'}, 'from': {'id': 651746712, 'is_bot': False, 'first_name': 'Gianmarco', 'username': 'mio username', 'language_code': 'it'}, 'date': 1615790632, 'old_chat_member': {'user': {'id': 1688038895, 'is_bot': True, 'first_name': 'Didascalia Automatica', 'username': 'auto_didascalia_bot'}, 'status': 'left'}, 'new_chat_member': {'user': {'id': 1688038895, 'is_bot': True, 'first_name': 'Didascalia Automatica', 'username': 'auto_didascalia_bot'}, 'status': 'administrator', 'can_be_edited': False, 'can_manage_chat': True, 'can_change_info': True, 'can_post_messages': False, 'can_edit_messages': False, 'can_delete_messages': False, 'can_invite_users': False, 'can_restrict_members': True, 'can_promote_members': False, 'can_manage_voice_chats': True, 'is_anonymous': False}}}"
    Traceback (most recent call last):
      File "C:\Users\GianmarcoAppData\Local\Programs\Python\Python38\lib\site-packages\telepot\__init__.py", line 1191, in get_from_telegram_server
        offset = max([relay_to_collector(update) for update in result]) + 1
      File "C:\Users\GianmarcoAppData\Local\Programs\Python\Python38\lib\site-packages\telepot\__init__.py", line 1191, in <listcomp>
        offset = max([relay_to_collector(update) for update in result]) + 1
      File "C:\Users\GianmarcoAppData\Local\Programs\Python\Python38\lib\site-packages\telepot\__init__.py", line 1164, in relay_to_collector
        key = _find_first_key(update, ['message',
      File "C:\Users\GianmarcoAppData\Local\Programs\Python\Python38\lib\site-packages\telepot\__init__.py", line 68, in _find_first_key
        raise KeyError('No suggested keys %s in %s' % (str(keys), str(d)))
    KeyError: "No suggested keys ['message', 'edited_message', 'channel_post', 'edited_channel_post', 'callback_query', 'inline_query', 'chosen_inline_result', 'shipping_query', 'pre_checkout_query'] in {'update_id': 360389344, 'my_chat_member': {'chat': {'id': -1001342579018, 'title': 'canale', 'username': 'canale', 'type': 'channel'}, 'from': {'id': 651746712, 'is_bot': False, 'first_name': 'Gianmarco', 'username': 'mio username', 'language_code': 'it'}, 'date': 1615790632, 'old_chat_member': {'user': {'id': 1688038895, 'is_bot': True, 'first_name': 'Didascalia Automatica', 'username': 'auto_didascalia_bot'}, 'status': 'left'}, 'new_chat_member': {'user': {'id': 1688038895, 'is_bot': True, 'first_name': 'Didascalia Automatica', 'username': 'auto_didascalia_bot'}, 'status': 'administrator', 'can_be_edited': False, 'can_manage_chat': True, 'can_change_info': True, 'can_post_messages': False, 'can_edit_messages': False, 'can_delete_messages': False, 'can_invite_users': False, 'can_restrict_members': True, 'can_promote_members': False, 'can_manage_voice_chats': True, 'is_anonymous': False}}}"
    





  • Re: Qualcuno mi aiuta ad andare avanti?
    Forum >> Principianti
    Daniele aka Palmux said @ 2021-02-20 20:03:26:
    Ciao caro, visto che siamo nel 2021 e non nel 1991, se devi mandare del codice, usa strumenti come pastebin o simili. ;)

    Cya

    Si hai ragione ahahah... ho fatto una sciocchezza ad incollare lo screen da appunti.

    comunque sono riuscito a risolvere, ho "ripassato" il ciclo while e le boleane... inoltre mi sono accorto di aver dimenticato di sommare il valore alla variabile.

    nome=input('Ciao, come ti chiami? ')
    
    while A == 0:
        
        scelta1 = input('Piacere di conoscerti ' + (nome) + ', pronto a cominciare? ')
        
        if scelta1 == "S" or scelta1 == "s":
            A += 1
            print('\nOttima scelta...\n')
            break
            
        elif scelta1 == "N" or scelta1 == "n":
            print('\nCiao ' + (nome) + ', alla prossima\n!')
            break
            
        else:
            print('Hai fatto una scelta errata ' + (nome) + '... Puoi rispondere solamente "S","N","s","n"')
            
            
    while A == 1:
        
        scelta2 = input('Fuori porta pioggia? ')
        
        if scelta2 == "S" or scelta2 == "s":
            A += 1
            print('\nMannaggia... il brutto tempo è una palla...')
            break
            
        elif scelta2 == "N" or scelta2 == "n":
            B += 1
            print('\nMenomale! Adoro il bel tempo :)')
            break
            
        else:
            print('Hai fatto una scelta errata ' + (nome) + '... Puoi rispondere solamente "S","N","s","n"')
    
                
    while A== 1 and B == 1:
        
        scelta3b = input('\nTi farai una passeggiata? ')
        
        if scelta3b == "S" or scelta3b == "s":
            print('\nSono contento per te ' + (nome) + ', tuttavia il gioco termina qui...\nProva altre scelte per seguire percorsi diversi\n')
            break
                
        elif scelta3b == "N" or scelta3b == "n":
            B += 1
            print('\nPeccato... ')
            break
                
                
        else:
            print('Hai fatto una scelta errata ' + (nome) + '... Puoi rispondere solamente "S","N","s","n"')
    
    
    while A== 2 and B == 0:
        
        scelta3a = input('\nHai un ombrello? ')
    
        if scelta3a == "S" or scelta3a == "s":
            A+=1
            print('\nBene!')
            break
                
        elif scelta3a == "N" or scelta3a == "n":
            B += 1
            print('\nOps...')
            break
                
                
        else:
            print('Hai fatto una scelta errata ' + (nome) + '... Puoi rispondere solamente "S","N","s","n"')  
    




    --- Ultima modifica di KeyMan98 in data 2021-02-21 09:21:18 ---

    --- Ultima modifica di KeyMan98 in data 2021-02-21 09:32:36 ---
  • Re: Qualcuno mi aiuta ad andare avanti?
    Forum >> Principianti
    ops, mi ha mandato la foto come codice...
  • Re: Qualcuno mi aiuta ad andare avanti?
    Forum >> Principianti
    Più che altro se provo a indentarlo, mi fa continuare lo stesso anche se il risultato non è 1.

    Anche se la condizione diventa falsa, passa alla domanda successiva... non importa se uso break o continue... mi da lo stesso problema.
  • Re: Qualcuno mi aiuta ad andare avanti?
    Forum >> Principianti
    Più che altro se provo a indentarlo, mi fa continuare lo stesso anche se il risultato non è 1.
    Anche se la condizione diventa falsa, passa alla domanda successiva... non importa se uso break o continue... mi da lo stesso problema.





    --- Ultima modifica di Daniele aka Palmux in data 2021-02-20 20:00:16 ---
  • Qualcuno mi aiuta ad andare avanti?
    Forum >> Principianti
    Ho provato a creare un dialogo ispirandomi allo schema dell'ombrello... tuttavia non riesco a collegare correttamente i 2 blocchi (dove ho scritto "??????").
    Un aiutino? Grazie mille per la disponibilità.

    A = 0
    B = 0
    while True:
        scelta1 = input('Sei pronto a cominciare? ')
        
        if scelta1 == "S" or scelta1 == "s":
            A + 1
            print('\nOttimo! Cominciamo...\n')
            break
            
        elif scelta1 == "N" or scelta1 == "n":
            print('Alla prossima')
            break
            
        else:
            print('Scelta errata.. Puoi rispondere solamente "S","N","s","n"')
            
        if A == 1:
            break
    if A == 0:
    ??????????????    
    
    while True:
        scelta2 = input('Fuori porta pioggia? ')
        
        if scelta2 == "S" or scelta2 == "s":
            A + 1
            print('\nMannaggia... il brutto tempo è una palla...\nVuoi uscire lo stesso?\n')
            break
            
        elif scelta2 == "N" or scelta2 == "n":
            B + 1
            print('Menomale! Adoro il bel tempo :)')
            break
            
        else:
            print('Scelta errata.. Puoi rispondere solamente "S","N","s","n"')