@mhe_xyi

Ошибка TypeError: work_command() missing 1 required positional argument: 'points' что делать?

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


bot = telebot.TeleBot('xxx')


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 == 'Воркать':
        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
        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()

ошибка есть в заголовке не знаю что делать если делать global points то будет у всех один баланс
  • Вопрос задан
  • 64 просмотра
Пригласить эксперта
Ответы на вопрос 1
Vindicar
@Vindicar
RTFM!
@bot.message_handler(content_types=['text'])
def work_command(message, points):


Бот ничего не знает про points и откуда оно берётся. Бот ожидает, что любая функция, отмеченная как обработчик сообщений, принимает ровно один параметр - объект принятого сообщения. Если это условие не выполняется, это твой косяк.

если делать global points то будет у всех один баланс

Вовсе нет. Ты не обратил внимание, что у тебя points - словарь, где ключ - id пользователя? (к слову, кто код писал? уж точно не разраб-крут). У тебя для разных id пользователей будут отдельные элементы в словаре, с отдельными значениями.

Другое дело, что словарь не переживёт перезапуска бота...
Ответ написан
Ваш ответ на вопрос

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

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