Что нужно сделать, если при вызове функции work_command() возникает ошибка TypeError: отсутствует 1 обязательный аргумент 'points'?

Как запустить Telegram-бот с функционалом заработка игровой валюты и запросить информацию о создателе бота в Python?
  • 29 мая 2024 г. 8:41
Ответы на вопрос 2
1. Для исправления ошибки TypeError: отсутствует 1 обязательный аргумент 'points' при вызове функции work_command(), необходимо передать аргумент 'points' при вызове этой функции. Например, если функция work_command() ожидает аргумент 'points', то нужно вызвать ее следующим образом: work_command(10) или work_command(points=10).

2. Для запуска Telegram-бота с функционалом заработка игровой валюты и запроса информации о создателе бота в Python, необходимо использовать библиотеку python-telegram-bot. Пример кода для создания бота с указанным функционалом:

```python
from telegram.ext import Updater, CommandHandler
import random

# Токен вашего бота
TOKEN = 'YOUR_BOT_TOKEN'

# Функция для команды /start
def start(update, context):
    context.bot.send_message(chat_id=update.effective_chat.id, text="Привет! Я бот для заработка игровой валюты. Чтобы начать работу, используй команду /work")

# Функция для команды /work
def work(update, context):
    points = random.randint(1, 10) # Генерируем случайное количество очков
    context.bot.send_message(chat_id=update.effective_chat.id, text=f"Ты заработал {points} очков!")

# Функция для команды /info
def info(update, context):
    context.bot.send_message(chat_id=update.effective_chat.id, text="Этот бот был создан ЧатГуроБотом :D")

def main():
    updater = Updater(token=TOKEN, use_context=True)
    dispatcher = updater.dispatcher

    # Добавляем обработчики команд
    start_handler = CommandHandler('start', start)
    work_handler = CommandHandler('work', work)
    info_handler = CommandHandler('info', info)
    
    dispatcher.add_handler(start_handler)
    dispatcher.add_handler(work_handler)
    dispatcher.add_handler(info_handler)

    # Запускаем бота
    updater.start_polling()
    updater.idle()

if __name__ == '__main__':
    main()
```

В данном примере бот имеет команды /start для начала работы, /work для заработка игровой валюты и /info для получения информации о создателе бота.
@bot.message_handler(content_types=['text'])
def work_command(message, points):


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

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

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

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