@equ1equ

TELEBOT.Почему смешиваются данные при использовании бота несколькими пользователями?

Привет мне нужна небольшая помощь от вас... у меня есть телеграм бот который просто подставляет текст в картинку ,картинка статичная , пользователь просто отправляет 2 сообщения и ему возвращается картинка . Проблема в том что при одновременном пользованием этим ботом данные смешиваются и ответ приходит со смешанными данными.Я весьма слабоват в Python Помогите пожалуйста..

import telebot
import config
import time


from PIL import Image
from PIL import ImageDraw
from PIL import ImageFont

token = config.TOKEN
bot = telebot.TeleBot(token)
dateGiven = False
nameString = [];

def generate_doc(first_name, second_name, date):

    img = Image.open('Perevod.png') # Грузим Картинку

    nameFont = ImageFont.truetype('arial.ttf',22) # Загрузка шрифта и установка размера
    pechatFont = ImageFont.truetype('CoreSansG.ttf',30) # Загрузка шрифта и установка размера
    dateFont = ImageFont.truetype('CoreSansG.ttf',73)
    namefont_color = '#414141' # Цвет шрифта
    datefont_color = '#ffffff' # Цвет шрифта
    

    name = first_name + ' ' + second_name # Соединяем имя и фамилию

    name_pos = (23,453) # Координаты имени и фамилии

    drawing = ImageDraw.Draw(img) # Создаем пикчу
    drawing.text(name_pos,name,font=nameFont,fill=namefont_color) # Пишем текст
    
    date_pos = (20,236) # Координаты даты
    drawing.text(date_pos,date + " Т",font=dateFont,fill=datefont_color) # Пишем дату
    
    
    textWidth = drawing.textsize(name,font=nameFont)
    pechat_pos = (25 + textWidth[0] + 50,256) # Координаты 
    drawing.text(pechat_pos,'',font=dateFont,fill=datefont_color) # Пишем дату
    
    dateGiven = False
    return img

@bot.message_handler(content_types=['text']) # Ловим сообщение типа текст
def repeat_all_message(message): # Функция которая вызывается от хендлера
    global dateGiven
    global nameString
    
    string = message.text # Текст
        
    if dateGiven == False:
        if string == '/start':
            bot.send_message(message.from_user.id,'Введите имя и  фамилию большой буквы.')
            return
          
        s = string.split(' ') 
        
        if len(s) == 2: # проверка на длину
            bot.send_message(message.from_user.id,'Введите дату.')
            dateGiven = True
            nameString = s # Текст
        else:
            bot.send_message(message.from_user.id,'Ошибка! Введите имя и фамили через пробел (с большой буквы).')
    else:
        image = generate_doc(nameString[0], nameString[1], string) # дергаем нашу функцию
        image.save(str(message.from_user.id) + ' completedCert.jpg') # сохраняем пикчу
        bot.send_photo(message.from_user.id,photo=open(str(message.from_user.id) + ' completedCert.jpg','rb')) # отправляем пикчу
        dateGiven = False;

bot.polling(none_stop=True)
  • Вопрос задан
  • 280 просмотров
Пригласить эксперта
Ответы на вопрос 1
neqrotek
@neqrotek
Потому что ваши глобальные значения открыты для всех пользователей. Они же глобальные.
Как выход, вывести информацию в бд с привязкой к ID пользователя.
Была идентичная проблема, решил так. (нагрузка максимум 10 человек одновременно, поэтому нормально).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы