Untitled
unknown
plain_text
2 years ago
11 kB
5
Indexable
import telebot from telebot import types # Replace with your own bot token bot = telebot.TeleBot("6014047695:AAHvjt6h-hzLBT0WzEHBrOIMXo2T3LG8sDs") # A dictionary to store the virtual money of each user money = {} # A function to check if a user is an admin def is_admin(user_id): # Replace with your own admin id return user_id == 2115205796 # A function to format the money amount def format_money(amount): return f"{amount:.2f} V$" # A handler for the /start command @bot.message_handler(commands=["start"]) def start(message): # Get the user id and name user_id = message.from_user.id user_name = message.from_user.first_name # Initialize the money for the user if not already done if user_id not in money: money[user_id] = 0 # Send a welcome message and show the keyboard bot.send_message(user_id, f"Hello, {user_name}! Welcome to the virtual money bot.\nYou have {format_money(money[user_id])} in your account.", reply_markup=keyboard()) # A function to create a keyboard with buttons def keyboard(): # Create a new keyboard kb = types.ReplyKeyboardMarkup(resize_keyboard=True) # Add buttons for sending and receiving money kb.add(types.KeyboardButton("Send money"), types.KeyboardButton("Receive money")) # Add a button for checking balance kb.add(types.KeyboardButton("Check balance")) # Return the keyboard return kb # A handler for text messages @bot.message_handler(content_types=["text"]) def text(message): # Get the user id and name user_id = message.from_user.id user_name = message.from_user.first_name # Get the text of the message text = message.text # If the user wants to send money, ask for the receiver and the amount if text == "Send money": bot.send_message(user_id, "Who do you want to send money to? Please enter their user id or username.") bot.register_next_step_handler(message, send_money) # If the user wants to receive money, ask for the sender and the amount elif text == "Receive money": bot.send_message(user_id, "Who do you want to receive money from? Please enter their user id or username.") bot.register_next_step_handler(message, receive_money) # If the user wants to check balance, show their current money elif text == "Check balance": bot.send_message(user_id, f"You have {format_money(money[user_id])} in your account.") # If the user is an admin, they can also give money to any user elif text == "Give money" and is_admin(user_id): bot.send_message(user_id, "Who do you want to give money to? Please enter their user id or username.") bot.register_next_step_handler(message, give_money) # Otherwise, send an invalid message else: bot.send_message(user_id, "Invalid message. Please use one of the buttons below.", reply_markup=keyboard()) # A function to handle sending money def send_money(message): # Get the sender id and name sender_id = message.from_user.id sender_name = message.from_user.first_name # Get the receiver id or username from the message receiver = message.text # Try to find the receiver id from the username if needed try: receiver_id = int(receiver) except ValueError: receiver_id = bot.get_chat_member(receiver).user.id # Check if the receiver is valid and not the same as the sender if receiver_id in money and receiver_id != sender_id: # Ask for the amount to send bot.send_message(sender_id, f"How much do you want to send to {receiver}? Please enter a positive number.") bot.register_next_step_handler(message, lambda m: confirm_send_money(m, receiver_id)) else: # Send an error message and go back to the main menu bot.send_message(sender_id, "Invalid receiver. Please try again.", reply_markup=keyboard()) # A function to handle confirming sending money def confirm_send_money(message, receiver_id): # Get the sender id and name sender_id = message.from_user.id sender_name = message.from_user.first_name # Get the amount from the message amount = message.text # Try to convert the amount to a float and check if it is positive and less than or equal to the sender's balance try: amount = float(amount) if amount > 0 and amount <= money[sender_id]: # Deduct the amount from the sender's balance and add it to the receiver's balance money[sender_id] -= amount money[receiver_id] += amount # Send a confirmation message to both parties and go back to the main menu bot.send_message(sender_id, f"You have successfully sent {format_money(amount)} to {receiver_id}.\nYour new balance is {format_money(money[sender_id])}.", reply_markup=keyboard()) bot.send_message(receiver_id, f"You have received {format_money(amount)} from {sender_id}.\nYour new balance is {format_money(money[receiver_id])}.", reply_markup=keyboard()) else: # Send an error message and go back to the main menu bot.send_message(sender_id, "Invalid amount. Please try again.", reply_markup=keyboard()) except ValueError: # Send an error message and go back to the main menu bot.send_message(sender_id, "Invalid amount. Please try again.", reply_markup=keyboard()) # A function to handle receiving money def receive_money(message): # Get the receiver id and name receiver_id = message.from_user.id receiver_name = message.from_user.first_name # Get the sender id or username from the message sender = message.text # Try to find the sender id from the username if needed try: sender_id = int(sender) except ValueError: sender_id = bot.get_chat_member(sender).user.id # Check if the sender is valid and not the same as the receiver if sender_id in money and sender_id != receiver_id: # Ask for the amount to receive bot.send_message(receiver_id, f"How much do you want to receive from {sender}? Please enter a positive number.") bot.register_next_step_handler(message, lambda m: confirm_receive_money(m, sender_id)) else: # Send an error message and go back to the main menu bot.send_message(receiver_id, "Invalid sender. Please try again.", reply_markup=keyboard()) # A function to handle confirming receiving money def confirm_receive_money(message, sender_id): # Get the receiver id and name receiver_id = message.from_user.id receiver_name = message.from_user.first_name # Get the amount from the message amount = message.text # Try to convert the amount to a float and check if it is positive and less than or equal to the sender's balance try: amount = float(amount) if amount > 0 and amount <= money[sender_id]: # Deduct the amount from the sender's balance and add it to the receiver's balance money[sender_id] -= amount money[receiver_id] += amount # Send a confirmation message to both parties and go back to the main menu bot.send_message(receiver_id, f"You have successfully received {format_money(amount)} from {sender_id}.\nYour new balance is {format_money(money[receiver_id])}.", reply_markup=keyboard()) bot.send_message(sender_id, f"You have sent {format_money(amount)} to {receiver_id}.\nYour new balance is {format_money(money[sender_id])}.", reply_markup=keyboard()) else: # Send an error message and go back to the main menu bot.send_message(receiver_id, "Invalid amount. Please try again.", reply_markup=keyboard()) except ValueError: # Send an error message and go back to the main menu bot.send_message(receiver_id, "Invalid amount. Please try again.", reply_markup=keyboard()) # A function to handle giving money (only for admin) def give_money(message): # Get the admin id and name admin_id = message.from_user.id admin_name = message.from_user.first_name # Get the recipient id or username from the message recipient = message.text # Try to find the recipient id from the username if needed try: recipient_id = int(recipient) except ValueError: recipient_id = bot.get_chat_member(recipient).user.id # Check if the recipient is valid if recipient in money: # Ask for how much you want give them bot.send_message(adminid ,f"How much do you want give them?") bot.register_next_step_handler(message ,lambda m :confirm_give_money(m ,recipientid)) else : # A function to handle giving money (only for admin) def give_money(message): # Get the admin id and name admin_id = message.from_user.id admin_name = message.from_user.first_name # Get the recipient id or username from the message recipient = message.text # Try to find the recipient id from the username if needed try: recipient_id = int(recipient) except ValueError: recipient_id = bot.get_chat_member(recipient).user.id # Check if the recipient is valid if recipient_id in money: # Ask for how much you want to give them bot.send_message(admin_id ,f"How much do you want to give to {recipient}? Please enter a positive number.") bot.register_next_step_handler(message ,lambda m :confirm_give_money(m ,recipient_id)) else: # Send an error message and go back to the main menu bot.send_message(admin_id, "Invalid recipient. Please try again.", reply_markup=keyboard()) # A function to handle confirming giving money (only for admin) def confirm_give_money(message, recipient_id): # Get the admin id and name admin_id = message.from_user.id admin_name = message.from_user.first_name # Get the amount from the message amount = message.text # Try to convert the amount to a float and check if it is positive try: amount = float(amount) if amount > 0: # Add the amount to the recipient's balance money[recipient_id] += amount # Send a confirmation message to both parties and go back to the main menu bot.send_message(admin_id, f"You have successfully given {format_money(amount)} to {recipient_id}.\nTheir new balance is {format_money(money[recipient_id])}.", reply_markup=keyboard()) bot.send_message(recipient_id, f"You have received {format_money(amount)} from {admin_id}.\nYour new balance is {format_money(money[recipient_id])}.", reply_markup=keyboard()) else: # Send an error message and go back to the main menu bot.send_message(admin_id, "Invalid amount. Please try again.", reply_markup=keyboard()) except ValueError: # Send an error message and go back to the main menu bot.send_message(admin_id, "Invalid amount. Please try again.", reply_markup=keyboard()) # Start polling for updates bot.polling()
Editor is loading...