0

Bu benim ilk sorum burada. Python'da telgraf botunu tekrar yazmaya çalışıyorum. Ve bir problemi çözemiyorum. Botumu kendim test ettiğimde her şey iyi, ama eğer başka bir kullanıcı benim bot betiğimle bağlanırsa, başlangıç ​​değişkenleri ile onun için başlamıyor. Örneğin, kullanıcı kodu "1" gönderdiğinde, bu kod komut dosyasında x değişkenini artırır. Ancak yeni kullanıcı için x zaten boş değil. Lütfen tamir etmeme yardım et.Yeni istemci için Python'da (başlangıç ​​değişkenleri ile) telgraf botu nasıl yeniden başlatılır?

x = {} 

ve sonra bu gibi kullanmak - - Yerine değişken x'in

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 = 'TOKEN HERE' 

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

x = 0 

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

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 start') 
      setEnabled(chat_id, True) 
     elif text == '/stop': 
      reply('Bot disabled') 
      setEnabled(chat_id, False) 
     else: 
      reply('What command?') 

    elif '1' in text: 
     global x 
     x = x + 1 
     reply(str(x)) 
    else: 
     if getEnabled(chat_id): 
      reply('?') 
     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) 
+0

'x' değişken kullanıcı başına olduğunu veya global olarak paylaşılmalı mı? PS. Bunu 'global' ilan ettiğinizi biliyorum ama niyetleriniz hakkında emin olmak istiyorum. – unnikked

+0

Her yeni kullanıcıya x düşürmek istiyorum. Ama nasıl doğru yapacağımı bilmiyorum. – Dennix

+0

Bot'a bağlanan her kullanıcı, başka hiçbir kullanıcı gibi komut dosyasıyla çalışmaya başlamak zorundadır ve betik ilk durum için başlangıç ​​durumuna sahip örn. ve x = 0. Global bir değişken olarak değil, kullanıcı başına – Dennix

cevap

0

, böyle piton sözlüğü kullanmak isteyebilirsiniz

key = str(chat_id) 
if key in x: 
    x[key] += 1 
else: 
    x[key] = 1 
İlgili konular