@qot

Как в телеграм-боте сделать каждому игроку отдельный баланс?

from time import sleep
import random
import telebot
from telebot.types import InlineKeyboardMarkup, InlineKeyboardButton, KeyboardButton, ReplyKeyboardMarkup
print("Бот https://t.me/xxxxxxxx ЗАПУЩЕН!!!")


bot = telebot.TeleBot('xxxxxxxxxxxxxxxx')


lezt = ["Тебе подарили", "Ты отпинал бомжа и забрал у него", "Ты поработал на стройке‍ и получил", "Ты создал лекарство от рака и тебе дали за это", "Ты грабанул магаз на", "Ты продал свои органы и тебе дали целых"]

@bot.message_handler(commands=['start'])
def start_command(message):
    print("+1 пользователь")
    markup = telebot.types.ReplyKeyboardMarkup(resize_keyboard=True)
    btn1 = KeyboardButton("Воркать")
    markup.add(btn1)
    bot.send_message(message.chat.id, "Добро пожаловать в бота, где ты можешь зарабатывать игровую валюту!\n\nПосоревнуйся с друзьями, кто больше заработает!\n\n⬇Жми на кнопку и начинай!⬇", reply_markup=markup)


@bot.message_handler(commands=['info'])
def shop_command(message):
    markup1 = InlineKeyboardMarkup()
    markup1.row_width = 2
    markup1.add(InlineKeyboardButton("Кто же он??", callback_data="razrab"))
    bot.send_message(message.chat.id, "Это Чат-Бот, который был создан менее чем за час и менее 100 строк кода на языке Python! Да, разраб крут!", reply_markup=markup1)
    print(f"{message.from_user.first_name} глянул инфу")


@bot.callback_query_handler(func=lambda call: True)
def callback_query(call):
    if call.data == "razrab":
        bot.answer_callback_query(call.id, "И это....")
        sleep(2.5)
        bot.send_message(call.message.chat.id, "ЧТОООО??? ДААА ЭТО ЖЕ xxxxxxx!!!\n\np.s. его тг xxxxxx")

@bot.message_handler(content_types=['text'])
def work_command(message, points):
    if message.text == 'Воркать':
        ran_lezt = random.choice(lezt)
        ran = random.randint(1, 10)
        points += ran
        bot.send_message(message.chat.id, f"{ran_lezt} {ran}руб \n\nБаланс: {points}руб ")
        print(f"{message.from_user.first_name} поворкал на {ran} золотых")
    elif message.text == '4ESNOK':
        command_sent = False
        if not command_sent:
            command_sent = True
            points += 1000
            bot.send_message(message.chat.id, f"Ты успешно активировал промокод 4ESNOK и получил 1000 рублей!!!\n\nТвой баланс: {points}руб ")
        else:
            bot.send_message(message.chat.id, f"Ты уже активировал этот промокод!\n\nТвой баланс по-прежнему остается: {points}руб ")


bot.polling()

Помогите, как сделать чтобы для всех игроков был отдельный баланс, потому что выскакивает ошибка, что нету переменной points, а если вставить global points то у всех игроков одинаковый баланс
  • Вопрос задан
  • 351 просмотр
Решения вопроса 1
Zagir-vip
@Zagir-vip
Web dev, Game dev, app dev, Разработчик на Python!
ладно помогу тебе малой!

создаёшь словарь глобальный points = dict()
В проверке if ... == "Воркать": вставляешь код:
user_id = message.from_user.id # получаем ID отправителя.
if points.get(user_id, False): # Обращаемся к глобальному словарю points и проверяем на наличие пользователя.
   points[user_id] = 0 # пользователь не найден поэтому добавим его.
points[user_id] += ran # Пользователь уже точно добавлен, а значит добавляет деньги.

# получаем кол-во денег у пользователя с помощью:
cash = points.get(user_id, None) # Получаем пользователя, если нету то вернём None


P.S: Пожалуйста, назови бота: "Слово разраба. Бот на асфальте." или добавь меня в разрабы ) У тебя очень крутой бот.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Everything_is_bad
Стандартная проблема, ты не освоил основы python, а сразу полез писать ботов, а так бы знал, что минимум можно через словарь сделать отдельный баланс на каждого игрока, а максимум, что эти данные надо куда-то сохранять для восстановления после перезапуска бота.
Ответ написан
Ваш ответ на вопрос

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

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