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() |