Topic: Aiuto per un bot telegram in python  (Letto 1058 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline menco

  • python unicellularis
  • *
  • Post: 2
  • Punti reputazione: 0
    • Mostra profilo
Aiuto per un bot telegram in python
« il: Maggio 13, 2016, 19:51 »
Buonasera ragazzi,
avrei bisogno di una mano con un progetto bot per telegram. Non essendo ancora capace a provvedere da solo, ho scaricato da internet un bot starter per telegram (praticamente è programmato e funzionante ma non fa nulla se non dire "ciao" e cose simili). Sono riuscito a modificare alcune cose ma mi sono bloccato su 3 problemi (spero per voi GURU semplici da risolvere)

Il primo problema è questo:
Vorrei che il bot risponda con delle frasi prestabilite nel momento in cui un utente dice ad esempio Ciao. Il problema è che, se l'utente non scrive Ciao con la c maiuscola, il bot non risponde per il case sensitive.
Ho pensato ad un .lower ma ho provato ad inserirlo e il bot smette di funzionare (lo inserisco male?)

elif 'Ciao' in text:
            reply('Buonasera')

Secondo problema:
Non so se c'è la possibilità di usare random in maniera che scrivendo più cose, il bot risponda ogni volta in maniera diversa. In questo caso una volta Ciao, una volta Buongiorno e così via

elif 'Ciao' in text:
            reply('Ciao','Buongiorno') ecc ecc

Terzo problema:
scrivendo reply, il bot ogni volta mi riposta quello che ho scritto. Ho provato con write, print ma niente. In che modo posso risolvere?

Scusate in anticipo ma sono alle prime armi (probabilmente ho scritto un sacco di baggianate). Se serve ed è possibile inserisco il link dove ho preso il bot. Fatemi sapere e grazie in anticipo

Menco

Offline Th3Bugger

  • python unicellularis
  • *
  • Post: 17
  • Punti reputazione: 0
    • Mostra profilo
Re: Aiuto per un bot telegram in python
« Risposta #1 il: Maggio 16, 2016, 14:30 »
Per il primo problema:
[codice]
a="Ciao"
a=a.lower()
[/codice]
Per il secondo problema:
[codice]
import random

lista = ["Ciao" , "Buongiorno", "Salve"]
print(random.choice(lista))
[/codice]

Per il terzo problema dovresti utilizzare print. Magari se posti il codice potremmo aiutarti di più.

Offline menco

  • python unicellularis
  • *
  • Post: 2
  • Punti reputazione: 0
    • Mostra profilo
Re: Aiuto per un bot telegram in python
« Risposta #2 il: Maggio 16, 2016, 15:32 »
import StringIO
import json
import logging
import random
import urllib
import urllib2

# for sending images
from PIL import Image
import multipart

# standard app engine imports
from google.appengine.api import urlfetch
from google.appengine.ext import ndb
import webapp2

TOKEN = ''

BASE_URL = 'https://api.telegram.org/bot' + TOKEN + '/'


# ================================

class EnableStatus(ndb.Model):
    # key name: str(chat_id)
    enabled = ndb.BooleanProperty(indexed=False, default=False)


# ================================

def setEnabled(chat_id, yes):
    es = EnableStatus.get_or_insert(str(chat_id))
    es.enabled = yes
    es.put()

def getEnabled(chat_id):
    es = EnableStatus.get_by_id(str(chat_id))
    if es:
        return es.enabled
    return False


# ================================

class MeHandler(webapp2.RequestHandler):
    def get(self):
        urlfetch.set_default_fetch_deadline(60)
        self.response.write(json.dumps(json.load(urllib2.urlopen(BASE_URL + 'getMe'))))


class GetUpdatesHandler(webapp2.RequestHandler):
    def get(self):
        urlfetch.set_default_fetch_deadline(60)
        self.response.write(json.dumps(json.load(urllib2.urlopen(BASE_URL + 'getUpdates'))))


class SetWebhookHandler(webapp2.RequestHandler):
    def get(self):
        urlfetch.set_default_fetch_deadline(60)
        url = self.request.get('url')
        if url:
            self.response.write(json.dumps(json.load(urllib2.urlopen(BASE_URL + 'setWebhook', urllib.urlencode({'url': url})))))


class WebhookHandler(webapp2.RequestHandler):
    def post(self):
        urlfetch.set_default_fetch_deadline(60)
        body = json.loads(self.request.body)
        logging.info('request body:')
        logging.info(body)
        self.response.write(json.dumps(body))

        update_id = body['update_id']
        message = body['message']
        message_id = message.get('message_id')
        date = message.get('date')
        text = message.get('text')
        fr = message.get('from')
        chat = message['chat']
        chat_id = chat['id']

        if not text:
            logging.info('no text')
            return

        def reply(msg=None, img=None):
            if msg:
                resp = urllib2.urlopen(BASE_URL + 'sendMessage', urllib.urlencode({
                    'chat_id': str(chat_id),
                    'text': msg.encode('utf-8'),
                    'disable_web_page_preview': 'true',
                    'reply_to_message_id': str(message_id),
                })).read()
            elif img:
                resp = multipart.post_multipart(BASE_URL + 'sendPhoto', [
                    ('chat_id', str(chat_id)),
                    ('reply_to_message_id', str(message_id)),
                ], [
                    ('photo', 'image.jpg', img),
                ])
            else:
                logging.error('no msg or img specified')
                resp = None

            logging.info('send response:')
            logging.info(resp)

        if text.startswith('/'):
            if text == '/start':
                reply('Bot enabled')
                setEnabled(chat_id, True)
            elif text == '/stop':
                reply('Bot disabled')
                setEnabled(chat_id, False)
            elif text == '/image':
                img = Image.new('RGB', (512, 512))
                base = random.randint(0, 16777216)
                pixels = [base+i*j for i in range(512) for j in range(512)]  # generate sample image
                img.putdata(pixels)
                output = StringIO.StringIO()
                img.save(output, 'JPEG')
                reply(img=output.getvalue())
            else:
                reply('What command?')

        # CUSTOMIZE FROM HERE

        elif 'Ciao' in text:
            reply('Ciao')
        elif 'Buongiorno' in text:
           reply('Buongiorno a te')

        elif 'what time' in text:
            reply('look at the corner of your screen!')
        else:
            if getEnabled(chat_id):
                reply('Che hai detto?')
            else:
                logging.info('not enabled for chat_id {}'.format(chat_id))


app = webapp2.WSGIApplication([
    ('/me', MeHandler),
    ('/updates', GetUpdatesHandler),
    ('/set_webhook', SetWebhookHandler),
    ('/webhook', WebhookHandler),
], debug=True)

Offline Th3Bugger

  • python unicellularis
  • *
  • Post: 17
  • Punti reputazione: 0
    • Mostra profilo
Re: Aiuto per un bot telegram in python
« Risposta #3 il: Maggio 16, 2016, 16:05 »
Prova a sostituire
[codice]
elif 'Ciao' in text:
       reply('Ciao')
[/codice]
con
[codice]
elif text == "Ciao":
       reply("Ciao")
   
[/codice]

Offline Giornale di Sistema

  • python sapiens sapiens
  • ******
  • Post: 3.124
  • Punti reputazione: 4
    • Mostra profilo
    • Distillato di Python
Re: Aiuto per un bot telegram in python
« Risposta #4 il: Maggio 16, 2016, 16:47 »
Buonasera ragazzi,
avrei bisogno di una mano con un progetto bot per telegram.

Tra il progetto e le domande c'è un abisso... magari sei incastrato in quelle situazioni in cui "o fai o muori", altrimenti qualcosa di più semplice da cui cominciare?

Offline Mongol

  • python unicellularis
  • *
  • Post: 1
  • Punti reputazione: 0
    • Mostra profilo
Re:Aiuto per un bot telegram in python
« Risposta #5 il: Marzo 11, 2020, 13:49 »
Ciao! Per favore, ditemi perché viene utilizzato un BOT in Telegram. Voi per coso li usate e come puo utilizzarli gli altri? Sto pensando di creare il mio canale su Telegram e penso a come un BOT potrebbe semplificare il mio lavoro. Sono stato a lungo membro di diversi canali e ora voglio qualcosa di mio, un canale come i canali Telegram film. Spero che almeno questo mi metta in piedi, mi dia uno scopo nella vita. Forse mi renderà responsabile.
« Ultima modifica: Marzo 14, 2020, 20:59 da Mongol »