Форум программистов, компьютерный форум, киберфорум
Python: API, боты
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 17.08.2023
Сообщений: 1
Telegram Bot

Не работает выход в главное меню в 193 строке; не работает изменение баланса при победе, выигрыше или поражении

17.08.2023, 19:17. Показов 383. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
import os
import telebot
import time
import random
from telebot import types
# Импортируем классы для инлайн клавиатуры
from telebot.types import InlineKeyboardMarkup, InlineKeyboardButton
 
# Ваш токен бота
BOT_TOKEN = '' # Лучше хранить токен в переменной окружения
 
# Создайте экземпляр бота
bot = telebot.TeleBot(BOT_TOKEN)
 
# Словарь для хранения имен пользователей
usernames = {}
 
# Словарь для хранения балансов пользователей
balances = {}
 
# Словарь для хранения личных id пользователей
ids = {}
 
# Счетчик для генерации личных id пользователей
id_counter = 0
 
bet = 0
 
# Словарь для хранения промокодов и их свойств
# Ключ - промокод, значение - кортеж из количества монет и количества активаций
promo_codes = {
    "FLOPPA1": (100, 10), # Промокод FLOPPA1 дает 100 монет и может быть активирован 10 раз
    "FLOPPA2": (200, 5), # Промокод FLOPPA2 дает 200 монет и может быть активирован 5 раз
    "FLOPPA3": (300, 3), # Промокод FLOPPA3 дает 300 монет и может быть активирован 3 раза
}
 
# Словарь для хранения использованных промокодов пользователей
# Ключ - id пользователя, значение - список использованных промокодов
used_promo_codes = {}
 
# Обработчик команды /start
@bot.message_handler(commands=['start'])
def send_welcome(message):
    global id_counter # обращаемся к глобальной переменной
    # Отправьте сообщение с приветствием и предложением ввести имя
    bot.send_message(message.chat.id, "Привет, я floppa bot. Как тебя зовут?")
    # Присвойте пользователю личный id и увеличьте счетчик на 1
    ids[message.chat.id] = id_counter
    id_counter += 1
 
# Обработчик текстовых сообщений
@bot.message_handler(content_types=['text'])
def handle_text(message):
    # Проверьте, есть ли имя пользователя в словаре
    if message.chat.id not in usernames:
        # Сохраните имя пользователя в словаре
        usernames[message.chat.id] = message.text
        # Отправьте сообщение с подтверждением имени и перенаправьте на главный экран
        bot.send_message(message.chat.id, f"Приятно познакомиться, {message.text}!")
        # Начните баланс пользователя с нуля монет
        balances[message.chat.id] = 0
        # Создайте пустой список для использованных промокодов пользователя
        used_promo_codes[message.chat.id] = []
        send_main_screen(message)
    else:
        # Проверьте, какая кнопка была нажата или какой текст был введен
        if message.text == "Главный экран":
            # Перенаправьте на главный экран
            send_main_screen(message)
        elif message.text == "Промокод":
            # Отправьте сообщение с предложением ввести промокод
            bot.send_message(message.chat.id, "Пожалуйста, введите промокод:")
            # Добавьте обработчик следующего сообщения для проверки промокода
            bot.register_next_step_handler(message, check_promo_code)
        else:
            # Отправьте сообщение с ошибкой
            bot.send_message(message.chat.id, "Извините, я не понимаю эту команду.")
 
# Функция для отправки главного экрана с инлайн кнопками
def send_main_screen(message):
    # Создайте объект инлайн клавиатуры
    inline_keyboard = InlineKeyboardMarkup()
    # Добавьте кнопки на инлайн клавиатуру
    inline_keyboard.add(
        InlineKeyboardButton("Главный экран", callback_data="main_screen"),
        InlineKeyboardButton("Промокод", callback_data="promo_code"),
        InlineKeyboardButton("Казино", callback_data="casino")
    )
    # Отправьте сообщение с приветствием, балансом и предложением выбрать действие
    bot.send_message(message.chat.id, f"Приветствую, {usernames[message.chat.id]}! Ваш баланс: {balances[message.chat.id]} floppa coins. Чем ты хочешь заняться?", reply_markup=inline_keyboard)
 
# Функция для проверки промокода
def check_promo_code(message):
    # Получите промокод из сообщения
    promo_code = message.text.upper()
    # Проверьте, есть ли такой промокод в словаре
    if promo_code in promo_codes:
        # Получите свойства промокода из словаря
        coins, activations = promo_codes[promo_code]
        # Проверьте, не использовал ли пользователь этот промокод ранее
        if promo_code not in used_promo_codes[message.chat.id]:
            # Проверьте, не исчерпано ли количество активаций промокода
            if activations > 0:
                # Увеличьте баланс пользователя на количество монет промокода
                balances[message.chat.id] += coins
                # Добавьте промокод в список использованных пользователем
                used_promo_codes[message.chat.id].append(promo_code)
                # Уменьшите количество активаций промокода на 1
                promo_codes[promo_code] = (coins, activations - 1)
                # Отправьте сообщение с поздравлением и новым балансом
                bot.send_message(message.chat.id, f"Поздравляем! Вы активировали промокод {promo_code} и получили {coins} floppa coins. Ваш новый баланс: {balances[message.chat.id]} floppa coins.")
            else:
                # Отправьте сообщение с извинением и объяснением, что промокод исчерпан
                bot.send_message(message.chat.id, f"Извините, но этот промокод уже не действителен. Попробуйте другой.")
        else:
            # Отправьте сообщение с извинением и объяснением, что пользователь уже использовал этот промокод
            bot.send_message(message.chat.id, f"Извините, но вы уже использовали этот промокод. Вы можете использовать каждый промокод только один раз.")
    else:
        # Отправьте сообщение с извинением и объяснением, что такого промокода не существует
        bot.send_message(message.chat.id, f"Извините, но такого промокода не существует. Пожалуйста, проверьте правильность ввода.")
    # Перенаправьте на главный экран
    send_main_screen(message)
 
def send_casino(message):
    inline_keyboard = InlineKeyboardMarkup()
    inline_keyboard.add(
        InlineKeyboardButton("Камень, Ножницы, Бумага", callback_data="ssp"),
        InlineKeyboardButton("В разработке...", callback_data="not_ready"),
        InlineKeyboardButton("Главный экран", callback_data="main_screen")
    )
    # Отправьте сообщение с приветствием, балансом и предложением выбрать действие
    bot.send_message(message.chat.id, f"Вас приветсвует Floppa Casino! Здесь вы можете как выиграть миллион, так проиграть всё. Главное - сильное не заигрывайтесь (ну или как хотите ;) ). Удачной игры!", reply_markup=inline_keyboard)
 
def send_ssp(message):
    inline_keyboard = InlineKeyboardMarkup()
    inline_keyboard.add(
        InlineKeyboardButton("Сыграть", callback_data="bet_ssp"),
        InlineKeyboardButton("Главный экран", callback_data="main_screen")
    )
    bot.send_message(message.chat.id, f"Правила в "Камень, Ножницы, Бумага" просты: Камень выигрывает Ножницы, Ножницы - Бумагу и Бумага - Камень. Если вы выигрываете, то ваша ставка увеличивается 2,5 раза; если проигрываете, то ставка сгорает; при ничьей ставка возвращается на ваш баланс. Хотите сыграть?", reply_markup=inline_keyboard)
 
def send_bet_ssp(message):
    bot.send_message(message.chat.id, "Введите ставку:")
    bot.register_next_step_handler(message, process_bet)
 
def process_bet(message):
    try:
        bet = float(message.text)
        if bet <= 0:
            bot.send_message(message.chat.id, "Ставка должна быть положительным числом!")
            send_ssp(message)
        elif bet > balances[message.chat.id]:
            bot.send_message(message.chat.id, "У вас недостаточно средств на балансе для такой ставки!")
            send_ssp(message)
        else:
            balances[message.chat.id] -= bet  # Вычитаем ставку из баланса
            send_play_ssp(message, bet)  # Передаем ставку и новый баланс в функцию send_play_ssp
    except ValueError:
        bot.send_message(message.chat.id, "Пожалуйста, введите корректное число для ставки!")
        send_ssp(message)
 
def send_play_ssp(message, bet):
    inline_keyboard = InlineKeyboardMarkup()
    inline_keyboard.add(
        InlineKeyboardButton("Камень", callback_data="Камень"),
        InlineKeyboardButton("Ножницы", callback_data="Ножницы"),
        InlineKeyboardButton("Бумага", callback_data="Бумага")
    )
    print(f"Sending play SSP to user {message.chat.id}. Bet: {bet}. Balance: {balances[message.chat.id]}")
    bot.send_message(message.chat.id, f'Ваша ставка: {bet} и Ваш баланс: {balances[message.chat.id]}. Выберите один из предметов:', reply_markup=inline_keyboard)
 
def determine_winner(user_choice, bot_choice):
    if user_choice == bot_choice:
        return "draw"
    elif user_choice == "Камень" and bot_choice == "Ножницы":
        return "user" 
    elif user_choice == "Ножницы" and bot_choice == "Бумага":
        return "user"
    elif user_choice == "Бумага" and bot_choice == "Камень":
        return "user"
    else:
        return "bot"
 
def update_balance(user_id, winner, bet):
    global balances
        balances[user_id] += bet * 2.5
        bot.send_message(user_id, f"Вы победили! Ваш баланс: {balances[user_id]}")
    elif winner == "bot":
        bot.send_message(user_id, f"Вы проиграли! Ваш баланс: {balances[user_id]}")
    else:
        balances[user_id] += bet
        bot.send_message(user_id, f"Ничья! Ваш баланс остается без изменений: {balances[user_id]}")
    send_main_screen(user_id)
 
 
# Обработчик нажатий на инлайн кнопки
@bot.callback_query_handler(func=lambda call: True)
def handle_callback_query(call):
    # Получите данные из нажатой кнопки
    data = call.data
    # Проверьте, какая кнопка была нажата
    if data == "main_screen":
        # Перенаправьте на главный экран
        send_main_screen(call.message)
    elif data == "promo_code":
        # Отправьте сообщение с предложением ввести промокод
        bot.send_message(call.message.chat.id, "Пожалуйста, введите промокод:")
        # Добавьте обработчик следующего сообщения для проверки промокода
        bot.register_next_step_handler(call.message, check_promo_code)
    elif data == "casino":
        send_casino(call.message)
 
    elif data == "ssp":
        send_ssp(call.message)
 
    elif data == "bet_ssp":
        send_bet_ssp(call.message)
 
    elif data == "not_ready":
        bot.answer_callback_query(call.id, "Эта функция еще не готова ;(")
 
    elif data == "Камень" or data == "Ножницы" or data == "Бумага":
        user_choice = data.capitalize()
        bot_choice = random.choice(["Камень", "Ножницы", "Бумага"])
        bot.send_message(call.message.chat.id, "Ваш выбор: ...")
        time.sleep(5)  # Задержка на 5 секунд
        bot.send_message(call.message.chat.id, f"Ваш выбор: {user_choice}. Выбор бота: {bot_choice}")
        winner = determine_winner(user_choice, bot_choice)
        new_balance = balances
        update_balance(call.message.chat.id, winner, bet)
 
# Запустите бота
bot.polling()
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.08.2023, 19:17
Ответы с готовыми решениями:

При победе не работает вывод монет
Здравствуйте, битый час ломаю голову с проблемой вывода сколько игрок собрал монет. Во время игры в углу есть счетчик который считает...

При включении компа у меня не работает монитор, но нормально работает ТВ-выход
Уже несколько дней рву волосы на голове.... Такая проблемка: при включении компа у меня не работает монитор, только мигает лампочка...

Выход из подменю в главное меню
Всем привет. Нужно чтобы в методе ShowAllBooksSpecifiedParameter() была возможность выйти в главное меню. using System; namespace...

1
 Аватар для TimutGin
515 / 339 / 146
Регистрация: 16.02.2021
Сообщений: 626
17.08.2023, 20:15
Выделите ваш код как Python код в редакторе. Просто нет особого желания перед тем как решать вашу задачу ещё какое-то время перед этим расставлять везде отступы.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.08.2023, 20:15
Помогаю со студенческими работами здесь

Не работает Корона: ошибка 193
Установила всё следуя инструкции. При запуске сначала эти ошибки(1,2 фото), после запускается Макс, и в настройках Корону не видно.

Некорректно работает запрос на выход из игры или ее повтор
вообщем в когда сыграешь предлагает еще раз,чтобы я не жал пишет ерор и опять спрашивает буду ли еще,но работает ,если жать да ,то когда в...

Почему у меня не работает аудио выход на задней стороне корпуса, а передний работает?
почему у меня не работаеть аудио выход на задним стороне корпуса, передний работает


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru