import sqlite3 import asyncio import logging from aiogram import Bot, Dispatcher, executor, types from aiogram.contrib.fsm_storage.memory import MemoryStorage from aiogram.dispatcher import FSMContext from aiogram.dispatcher.filters.state import State, StatesGroup from aiogram.utils.exceptions import ChatNotFound, BotBlocked, TelegramAPIError # Initialize the bot and dispatcher API_TOKEN = 'xxx' ADMIN_ID = 'xxx' # Replace with the actual admin user ID bot = Bot(token=API_TOKEN) storage = MemoryStorage() dp = Dispatcher(bot, storage=storage) # Function to create or connect to the SQLite database def create_db_connection(): with sqlite3.connect('user_data.db') as conn: cursor = conn.cursor() cursor.execute(''' CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY, name TEXT, surname TEXT, referral_link TEXT, referrals TEXT, balance INTEGER, referrer INTEGER ) ''') conn.commit() create_db_connection() # Function to get user data from the database def get_user_data(user_id): try: with sqlite3.connect('user_data.db') as conn: cursor = conn.cursor() cursor.execute('SELECT * FROM users WHERE id=?', (user_id,)) user = cursor.fetchone() return user except sqlite3.Error as e: print(f"An error occurred: {e}") return None # Function to update user data in the database def update_user_data(user_id, **kwargs): try: with sqlite3.connect('user_data.db') as conn: cursor = conn.cursor() for key, value in kwargs.items(): cursor.execute(f'UPDATE users SET {key}=? WHERE id=?', (value, user_id)) conn.commit() except sqlite3.Error as e: print(f"An error occurred: {e}") # Function to add a new user to the database def add_new_user(user_id, name, surname, referral_link, referrer_id=None): try: with sqlite3.connect('user_data.db') as conn: cursor = conn.cursor() cursor.execute(''' INSERT INTO users (id, name, surname, referral_link, referrals, balance, referrer) VALUES (?, ?, ?, ?, ?, ?, ?) ''', (user_id, name, surname, referral_link, '', 20 if referrer_id else 0, referrer_id)) conn.commit() # If the user was referred, update the referrer's balance and referrals if referrer_id: update_user_data(referrer_id, balance=get_user_data(referrer_id)[5] + 20, referrals=f"{get_user_data(referrer_id)[4]}{user_id},") except sqlite3.Error as e: print(f"An error occurred: {e}") # Keyboard Markups main_menu_markup = types.ReplyKeyboardMarkup(resize_keyboard=True) main_menu_buttons = [ types.KeyboardButton('Меню'), ] main_menu_markup.add(*main_menu_buttons) submenu_markup = types.ReplyKeyboardMarkup(resize_keyboard=True) submenu_buttons = [ types.KeyboardButton('Товары'), types.KeyboardButton('Профиль'), types.KeyboardButton('Чат'), ] submenu_markup.add(*submenu_buttons) profile_menu_markup = types.ReplyKeyboardMarkup(resize_keyboard=True) profile_menu_buttons = [ types.KeyboardButton('Пригласить реферала'), types.KeyboardButton('Посмотреть рефералов'), types.KeyboardButton('Посмотреть баланс'), types.KeyboardButton('Назад'), ] profile_menu_markup.add(*profile_menu_buttons) admin_menu_markup = types.ReplyKeyboardMarkup(resize_keyboard=True) admin_menu_buttons = [ types.KeyboardButton('Рассылка сообщения'), types.KeyboardButton('Назад'), ] admin_menu_markup.add(*admin_menu_buttons) inl_buttons = types.InlineKeyboardButton(text='*** Planet Premium | 1 мес | 1.4usdt', callback_data='***_planet_premium') inl_buttons2 = types.InlineKeyboardButton(text='**** паспорта(украина, россиия) | 1usdt', callback_data='skan_pasporta') markup_inl = types.InlineKeyboardMarkup() markup_inl.add(inl_buttons).add(inl_buttons2) class FSMAdmin(StatesGroup): awaiting_message = State() @dp.message_handler(commands=['start']) async def cmd_started(message: types.Message): if message.chat.id == ADMIN_ID: await cmd_started_admin(message) else: await message.answer_sticker('CAACAgIAAxkBAALncGdA7NqTLiJPh2TgmD5-ws5fX0I4AALLAAMw1J0RdYrnGXBxds82BA') await message.answer("Привет, я бот по продаже цифровых и не только цифровых товаров", reply_markup=main_menu_markup) user_id = message.chat.id user = get_user_data(user_id) if not user: # Insert new user data name = message.from_user.first_name surname = message.from_user.last_name if message.from_user.last_name else 'Unknown' referral_link = f"https://t.me/lghanet_bot?start={user_id}" referrer_id = None if " " in message.text: referrer_candidate = message.text.split()[1] if referrer_candidate and referrer_candidate.isdigit(): referrer_id = int(referrer_candidate) add_new_user(user_id, name, surname, referral_link, referrer_id) else: await message.answer("Вы уже зарегистрированы.", reply_markup=main_menu_markup) @dp.message_handler(commands=['start'], user_id=ADMIN_ID) async def cmd_started_admin(message: types.Message): await message.answer_sticker('CAACAgIAAxkBAALncGdA7NqTLiJPh2TgmD5-ws5fX0I4AALLAAMw1J0RdYrnGXBxds82BA') await message.answer("Привет, админ!", reply_markup=admin_menu_markup) @dp.message_handler(text='Меню') async def show_submenu(message: types.Message): if message.chat.id == ADMIN_ID: await show_admin_menu(message) else: await message.answer("Выберите пункт меню:", reply_markup=submenu_markup) @dp.message_handler(text='Меню', user_id=ADMIN_ID) async def show_admin_menu(message: types.Message): await message.answer("Выберите пункт меню:", reply_markup=admin_menu_markup) @dp.message_handler(text='Товары') async def message_tovars(message: types.Message): await message.answer('Выберите товар:', reply_markup=markup_inl) @dp.message_handler(text='Профиль') async def show_profile_menu(message: types.Message): await message.answer("Выберите пункт профиля:", reply_markup=profile_menu_markup) @dp.message_handler(text='Пригласить реферала') async def invite_referral(message: types.Message): user_id = message.chat.id user = get_user_data(user_id) if user: referral_link = user[3] await message.answer(f"Вот ваша реферальная ссылка(если по ней переидет какой-либо человек то, вам будет положено 20 баллов на счет(0.20usdt/ 20рублей)): {referral_link}", reply_markup=profile_menu_markup) else: await message.answer("Данные профиля не найдены.", reply_markup=profile_menu_markup) @dp.message_handler(text='Посмотреть рефералов') async def view_referrals(message: types.Message): user_id = message.chat.id user = get_user_data(user_id) if user: referrals = user[4].split(',') if user[4] else [] referrals = [ref_id for ref_id in referrals if ref_id] if referrals: referral_list = "\n".join([f"ID: {ref_id}" for ref_id in referrals]) await message.answer(f"Ваши рефералы:\n{referral_list}", reply_markup=profile_menu_markup) else: await message.answer("У вас нет рефералов.", reply_markup=profile_menu_markup) else: await message.answer("Данные профиля не найдены.", reply_markup=profile_menu_markup) @dp.message_handler(text='Посмотреть баланс') async def view_balance(message: types.Message): user_id = message.chat.id user = get_user_data(user_id) if user: balance = user[5] await message.answer(f"Ваш баланс: {balance} баллов , чтобы пополнить баланс нажмите кнопку ниже", reply_markup=profile_menu_markup) else: await message.answer("Данные профиля не найдены.", reply_markup=profile_menu_markup) @dp.message_handler(text='Назад') async def back_to_submenu(message: types.Message): await message.answer("Выберите пункт меню:", reply_markup=submenu_markup) @dp.message_handler(text='Чат') async def chat(message: types.Message): await message.answer('Cсылка для вступление в чат : https://t.me/+ejIVKBtSxAg5NWRi') @dp.callback_query_handler(text='skan_pasporta') async def skan_pasporta_callback(call: types.CallbackQuery): await call.answer() user_id = call.from_user.id user = get_user_data(user_id) await call.message.answer('Товар пока не доступен') # if user and user[5] >= 100: # Check if balance is sufficient # # Generate and send the text file # file_content = "Here is your *** Planet Premium details:\n\n" + "Insert your *** details here" # with open("***_details.txt", "w") as file: # file.write(file_content) # with open("***_details.txt", "rb") as file: # await call.message.answer_document(types.InputFile(file, "***_details.txt")) # # Deduct the balance # update_user_data(user_id, balance=user[5] - 300) # await call.message.answer("*** details sent successfully.") # else: # await call.message.answer("Insufficient balance. You need at least 300 points.") @dp.callback_query_handler(text='***_planet_premium') async def ***_planet_premium_callback(call: types.CallbackQuery): await call.answer() user_id = call.from_user.id user = get_user_data(user_id) if user and user[5] >= 300: # Check if balance is sufficient # Generate and send the text file file_content = "Here is your *** Planet Premium details:\n\n" + "Insert your *** details here" with open("***_details.txt", "w") as file: file.write(file_content) with open("***_details.txt", "rb") as file: await call.message.answer_document(types.InputFile(file, "***_details.txt")) # Deduct the balance update_user_data(user_id, balance=user[5] - 100) await call.message.answer("*** details sent successfully.") else: await call.message.answer("Insufficient balance. You need at least 300 points.") @dp.message_handler(text='Рассылка сообщения', user_id=ADMIN_ID) async def send_message_to_all(message: types.Message): await message.answer("Введите сообщение для рассылки:", reply_markup=types.ReplyKeyboardRemove()) await FSMAdmin.awaiting_message.set() @dp.message_handler(state=FSMAdmin.awaiting_message, user_id=ADMIN_ID) async def send_message_to_all_users(message: types.Message, state: FSMContext): try: with sqlite3.connect('user_data.db') as conn: cursor = conn.cursor() cursor.execute('SELECT id FROM users') users = cursor.fetchall() for user in users: user_id = user # Ensure you are extracting the ID correctly try: await bot.send_message(user_id, message.text) except ChatNotFound: print(f"Chat not found for ID {user_id}") # Optionally, remove this user from the database if the chat is not found cursor.execute('DELETE FROM users WHERE id=?', (user_id,)) conn.commit() except BotBlocked: print(f"Bot blocked by user {user_id}") except TelegramAPIError as e: print(f"Error occurred while sending message to {user_id}: {e}") await message.answer("Сообщение отправлено всем пользователям.") except sqlite3.Error as e: await message.answer(f"Ошибка: {e}") finally: await state.reset_state() @dp.message_handler(text='Назад', user_id=ADMIN_ID) async def back_to_main_menu(message: types.Message): await message.answer("Выберите пункт меню:", reply_markup=admin_menu_markup) if __name__ == '__main__': logging.basicConfig(level=logging.INFO) executor.start_polling(dp, skip_updates=True) Код import sqlite3 import asyncio import logging from aiogram import Bot, Dispatcher, executor, types from aiogram.contrib.fsm_storage.memory import MemoryStorage from aiogram.dispatcher import FSMContext from aiogram.dispatcher.filters.state import State, StatesGroup from aiogram.utils.exceptions import ChatNotFound, BotBlocked, TelegramAPIError # Initialize the bot and dispatcher API_TOKEN = 'xxx' ADMIN_ID = 'xxx' # Replace with the actual admin user ID bot = Bot(token=API_TOKEN) storage = MemoryStorage() dp = Dispatcher(bot, storage=storage) # Function to create or connect to the SQLite database def create_db_connection(): with sqlite3.connect('user_data.db') as conn: cursor = conn.cursor() cursor.execute(''' CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY, name TEXT, surname TEXT, referral_link TEXT, referrals TEXT, balance INTEGER, referrer INTEGER ) ''') conn.commit() create_db_connection() # Function to get user data from the database def get_user_data(user_id): try: with sqlite3.connect('user_data.db') as conn: cursor = conn.cursor() cursor.execute('SELECT * FROM users WHERE id=?', (user_id,)) user = cursor.fetchone() return user except sqlite3.Error as e: print(f"An error occurred: {e}") return None # Function to update user data in the database def update_user_data(user_id, **kwargs): try: with sqlite3.connect('user_data.db') as conn: cursor = conn.cursor() for key, value in kwargs.items(): cursor.execute(f'UPDATE users SET {key}=? WHERE id=?', (value, user_id)) conn.commit() except sqlite3.Error as e: print(f"An error occurred: {e}") # Function to add a new user to the database def add_new_user(user_id, name, surname, referral_link, referrer_id=None): try: with sqlite3.connect('user_data.db') as conn: cursor = conn.cursor() cursor.execute(''' INSERT INTO users (id, name, surname, referral_link, referrals, balance, referrer) VALUES (?, ?, ?, ?, ?, ?, ?) ''', (user_id, name, surname, referral_link, '', 20 if referrer_id else 0, referrer_id)) conn.commit() # If the user was referred, update the referrer's balance and referrals if referrer_id: update_user_data(referrer_id, balance=get_user_data(referrer_id)[5] + 20, referrals=f"{get_user_data(referrer_id)[4]}{user_id},") except sqlite3.Error as e: print(f"An error occurred: {e}") # Keyboard Markups main_menu_markup = types.ReplyKeyboardMarkup(resize_keyboard=True) main_menu_buttons = [ types.KeyboardButton('Меню'), ] main_menu_markup.add(*main_menu_buttons) submenu_markup = types.ReplyKeyboardMarkup(resize_keyboard=True) submenu_buttons = [ types.KeyboardButton('Товары'), types.KeyboardButton('Профиль'), types.KeyboardButton('Чат'), ] submenu_markup.add(*submenu_buttons) profile_menu_markup = types.ReplyKeyboardMarkup(resize_keyboard=True) profile_menu_buttons = [ types.KeyboardButton('Пригласить реферала'), types.KeyboardButton('Посмотреть рефералов'), types.KeyboardButton('Посмотреть баланс'), types.KeyboardButton('Назад'), ] profile_menu_markup.add(*profile_menu_buttons) admin_menu_markup = types.ReplyKeyboardMarkup(resize_keyboard=True) admin_menu_buttons = [ types.KeyboardButton('Рассылка сообщения'), types.KeyboardButton('Назад'), ] admin_menu_markup.add(*admin_menu_buttons) inl_buttons = types.InlineKeyboardButton(text='*** Planet Premium | 1 мес | 1.4usdt', callback_data='***_planet_premium') inl_buttons2 = types.InlineKeyboardButton(text='**** паспорта(украина, россиия) | 1usdt', callback_data='skan_pasporta') markup_inl = types.InlineKeyboardMarkup() markup_inl.add(inl_buttons).add(inl_buttons2) class FSMAdmin(StatesGroup): awaiting_message = State() @dp.message_handler(commands=['start']) async def cmd_started(message: types.Message): if message.chat.id == ADMIN_ID: await cmd_started_admin(message) else: await message.answer_sticker('CAACAgIAAxkBAALncGdA7NqTLiJPh2TgmD5-ws5fX0I4AALLAAMw1J0RdYrnGXBxds82BA') await message.answer("Привет, я бот по продаже цифровых и не только цифровых товаров", reply_markup=main_menu_markup) user_id = message.chat.id user = get_user_data(user_id) if not user: # Insert new user data name = message.from_user.first_name surname = message.from_user.last_name if message.from_user.last_name else 'Unknown' referral_link = f"https://t.me/lghanet_bot?start={user_id}" referrer_id = None if " " in message.text: referrer_candidate = message.text.split()[1] if referrer_candidate and referrer_candidate.isdigit(): referrer_id = int(referrer_candidate) add_new_user(user_id, name, surname, referral_link, referrer_id) else: await message.answer("Вы уже зарегистрированы.", reply_markup=main_menu_markup) @dp.message_handler(commands=['start'], user_id=ADMIN_ID) async def cmd_started_admin(message: types.Message): await message.answer_sticker('CAACAgIAAxkBAALncGdA7NqTLiJPh2TgmD5-ws5fX0I4AALLAAMw1J0RdYrnGXBxds82BA') await message.answer("Привет, админ!", reply_markup=admin_menu_markup) @dp.message_handler(text='Меню') async def show_submenu(message: types.Message): if message.chat.id == ADMIN_ID: await show_admin_menu(message) else: await message.answer("Выберите пункт меню:", reply_markup=submenu_markup) @dp.message_handler(text='Меню', user_id=ADMIN_ID) async def show_admin_menu(message: types.Message): await message.answer("Выберите пункт меню:", reply_markup=admin_menu_markup) @dp.message_handler(text='Товары') async def message_tovars(message: types.Message): await message.answer('Выберите товар:', reply_markup=markup_inl) @dp.message_handler(text='Профиль') async def show_profile_menu(message: types.Message): await message.answer("Выберите пункт профиля:", reply_markup=profile_menu_markup) @dp.message_handler(text='Пригласить реферала') async def invite_referral(message: types.Message): user_id = message.chat.id user = get_user_data(user_id) if user: referral_link = user[3] await message.answer(f"Вот ваша реферальная ссылка(если по ней переидет какой-либо человек то, вам будет положено 20 баллов на счет(0.20usdt/ 20рублей)): {referral_link}", reply_markup=profile_menu_markup) else: await message.answer("Данные профиля не найдены.", reply_markup=profile_menu_markup) @dp.message_handler(text='Посмотреть рефералов') async def view_referrals(message: types.Message): user_id = message.chat.id user = get_user_data(user_id) if user: referrals = user[4].split(',') if user[4] else [] referrals = [ref_id for ref_id in referrals if ref_id] if referrals: referral_list = "\n".join([f"ID: {ref_id}" for ref_id in referrals]) await message.answer(f"Ваши рефералы:\n{referral_list}", reply_markup=profile_menu_markup) else: await message.answer("У вас нет рефералов.", reply_markup=profile_menu_markup) else: await message.answer("Данные профиля не найдены.", reply_markup=profile_menu_markup) @dp.message_handler(text='Посмотреть баланс') async def view_balance(message: types.Message): user_id = message.chat.id user = get_user_data(user_id) if user: balance = user[5] await message.answer(f"Ваш баланс: {balance} баллов , чтобы пополнить баланс нажмите кнопку ниже", reply_markup=profile_menu_markup) else: await message.answer("Данные профиля не найдены.", reply_markup=profile_menu_markup) @dp.message_handler(text='Назад') async def back_to_submenu(message: types.Message): await message.answer("Выберите пункт меню:", reply_markup=submenu_markup) @dp.message_handler(text='Чат') async def chat(message: types.Message): await message.answer('Cсылка для вступление в чат : https://t.me/+ejIVKBtSxAg5NWRi') @dp.callback_query_handler(text='skan_pasporta') async def skan_pasporta_callback(call: types.CallbackQuery): await call.answer() user_id = call.from_user.id user = get_user_data(user_id) await call.message.answer('Товар пока не доступен') # if user and user[5] >= 100: # Check if balance is sufficient # # Generate and send the text file # file_content = "Here is your *** Planet Premium details:\n\n" + "Insert your *** details here" # with open("***_details.txt", "w") as file: # file.write(file_content) # with open("***_details.txt", "rb") as file: # await call.message.answer_document(types.InputFile(file, "***_details.txt")) # # Deduct the balance # update_user_data(user_id, balance=user[5] - 300) # await call.message.answer("*** details sent successfully.") # else: # await call.message.answer("Insufficient balance. You need at least 300 points.") @dp.callback_query_handler(text='***_planet_premium') async def ***_planet_premium_callback(call: types.CallbackQuery): await call.answer() user_id = call.from_user.id user = get_user_data(user_id) if user and user[5] >= 300: # Check if balance is sufficient # Generate and send the text file file_content = "Here is your *** Planet Premium details:\n\n" + "Insert your *** details here" with open("***_details.txt", "w") as file: file.write(file_content) with open("***_details.txt", "rb") as file: await call.message.answer_document(types.InputFile(file, "***_details.txt")) # Deduct the balance update_user_data(user_id, balance=user[5] - 100) await call.message.answer("*** details sent successfully.") else: await call.message.answer("Insufficient balance. You need at least 300 points.") @dp.message_handler(text='Рассылка сообщения', user_id=ADMIN_ID) async def send_message_to_all(message: types.Message): await message.answer("Введите сообщение для рассылки:", reply_markup=types.ReplyKeyboardRemove()) await FSMAdmin.awaiting_message.set() @dp.message_handler(state=FSMAdmin.awaiting_message, user_id=ADMIN_ID) async def send_message_to_all_users(message: types.Message, state: FSMContext): try: with sqlite3.connect('user_data.db') as conn: cursor = conn.cursor() cursor.execute('SELECT id FROM users') users = cursor.fetchall() for user in users: user_id = user # Ensure you are extracting the ID correctly try: await bot.send_message(user_id, message.text) except ChatNotFound: print(f"Chat not found for ID {user_id}") # Optionally, remove this user from the database if the chat is not found cursor.execute('DELETE FROM users WHERE id=?', (user_id,)) conn.commit() except BotBlocked: print(f"Bot blocked by user {user_id}") except TelegramAPIError as e: print(f"Error occurred while sending message to {user_id}: {e}") await message.answer("Сообщение отправлено всем пользователям.") except sqlite3.Error as e: await message.answer(f"Ошибка: {e}") finally: await state.reset_state() @dp.message_handler(text='Назад', user_id=ADMIN_ID) async def back_to_main_menu(message: types.Message): await message.answer("Выберите пункт меню:", reply_markup=admin_menu_markup) if __name__ == '__main__': logging.basicConfig(level=logging.INFO) executor.start_polling(dp, skip_updates=True)
весь интернет облазил и никто почемуто не дает ответ на мой вопрос я хочу сделать так чтобы оплата в моем боте была с помощью crypto bot все используют какието сервисы по типу криптомуса
Lologhh, блять aiocryptopay используй если не можешь сам запрос написать в таком случае, да и он удобнее, типо камон нахуя работу с апи самому писать если есть либа
Переходишь в Crypto Pay, там ты найдешь все ответы на свой вопрос. В том числе там есть чат для разработчиков