fa
Feedback
𝙊𝙪𝙚𝙧𝙥| 𝙈𝘼𝙏𝙍𝙀𝙎𝙃𝙆𝘼 𝙍𝙥

𝙊𝙪𝙚𝙧𝙥| 𝙈𝘼𝙏𝙍𝙀𝙎𝙃𝙆𝘼 𝙍𝙥

رفتن به کانال در Telegram

Софты, макросы и много другого от ouerp Бот: @OuerpMTshop_Bot Канал: https://t.me/ouerpov Чат: https://t.me/ouerpovChat

نمایش بیشتر
کشور مشخص نشده استدسته بندی مشخص نشده است
148
مشترکین
اطلاعاتی وجود ندارد24 ساعت
-437 روز
-16830 روز
آرشیو پست ها
Всем сап совмеска с zerixx/Kapter От зерикса👇👇 МК ПК на выбор МК панда на выбор Оптима ПК 1000FPS ЛЮБОЙ МК НА КВМ АДМ ТГК От каптера👇👇 Новая приватка Старая приватка Старый софт Любой мк на панду Реклама на 3часа (с закрепом) Условия подписку на https://t.me/zerixx_777 @Kapternasvage Итоги на 35тапов! Раскид=100% выигрыш Удачи!

На какую игру софт сделать пишите комм Или что то другое

Что лучше мне делать?
Anonymous voting

Конкурс чтобы добить 1к сабов 60тапов, 25призовых 1. Новый приват каптера 2. Новый приват каптера 3. Новый приват каптера 4.
Конкурс чтобы добить 1к сабов 60тапов, 25призовых 1. Новый приват каптера 2. Новый приват каптера 3. Новый приват каптера 4. Старый приват каптера 5. Старый приват каптера Старый софт каптера (навсегда) 6. Новый софт каптера (на 2дня) 7.Приват бахмута 8. Приват шапика и верти 9. Приват Андрюши новый 10.Приват шизи 11. Приват Андрюши старый 12. Приват тана 13. Приват вертелы 14. Приват Хама и хашимуро 15. Приват зетикса 16. Приват простоузглянского 17. Приват гамбио 18. Реклама на 3часа(с закрепом) 19. Реклама на 1час (с закрепом) 20. Любой мк на панду на выбор 21/22. Капт сборка/ПК на 60фпс 23/25. Мини капт сборка 60фпс (21-25 это сборки на панду) Условия=подписку на тгк @Kapternasvage Раскид=100% выигрыш Удачи выиграть

Небольшой кодик для рандомайзера

cid = callback.data.split("_", 2)[2] comp = competitions.get(cid) if not comp: await callback.answer("Конкурс не найден.", show_alert=True) return if len(comp["participants"]) < comp["winners_count"]: await callback.answer("Ещё недостаточно участников.", show_alert=True) return winners_ids = random.sample(comp["participants"], comp["winners_count"]) winners_mentions = [] for wid in winners_ids: try: u = await bot.get_chat(wid) mention = u.username or f"[{u.full_name}](tg://user?id={wid})" winners_mentions.append(mention) except Exception: winners_mentions.append(f"Пользователь {wid}") comp["status"] = "finished" text = ( f"🏆 Конкурс «{comp['name']}» завершён!\n" f"Победители: {', '.join(winners_mentions)}" ) await bot.send_message(CHANNEL_ID, text) await callback.message.edit_text(f"{text}\nКонкурс завершён.", parse_mode="Markdown") await callback.answer() @dp.callback_query(F.data.startswith("cancel_comp_")) async def cb_cancel_comp(callback: types.CallbackQuery): cid = callback.data.split("_", 2)[2] comp = competitions.get(cid) if not comp: await callback.answer

preview = ( f"🏆 КОНКУРС: {comp['name']}\n" f"Нужно участников: {comp['participants_count']}\n" f"Победителей: {comp['winners_count']}" ) builder = InlineKeyboardBuilder() builder.button(text="✅ Участвовать", callback_data=f"join_comp_{cid}") kb = builder.as_markup() if comp["photo_id"]: msg = await bot.send_photo( CHANNEL_ID, photo=comp["photo_id"], caption=preview, reply_markup=kb ) else: msg = await bot.send_message( CHANNEL_ID, preview, reply_markup=kb ) comp["status"] = "active" comp["channel_msg_id"] = msg.message_id comp["created_at"] = datetime.now() # Статистика создателя if uid not in user_stats: user_stats[uid] = {"created_competitions": 0} user_stats[uid]["created_competitions"] += 1 del user_state[uid] await message.answer(f"🎉 Конкурс «{name}» опубликован в канале! Теперь собирайте участников.", reply_markup=kb_start()) else: # Неизвестное состояние — сбрасываем del user_state[uid] await message.answer("Не понимаю. Нажмите /start или выберите действие в меню.", reply_markup=kb_start()) # Обработка кнопки «Участвовать» @dp.callback_query(F.data.startswith("join_comp_")) async def cb_join_competition(callback: types.CallbackQuery): cid = callback.data.split("_", 2)[2] comp = competitions.get(cid) if not comp or comp["status"] != "active": await callback.answer("Конкурс не найден или завершён.", show_alert=True) return uid = callback.from_user.id if uid in comp["participants"]: await callback.answer("Вы уже участвуете!", show_alert=True) return if len(comp["participants"]) >= comp["participants_count"]: await callback.answer("Лимит участников достигнут.", show_alert=True) return comp["participants"].append(uid) await callback.answer("✅ Вы записались на участие!") # Проверка: набрано ли нужное число участников if len(comp["participants"]) == comp["participants_count"]: # Можно автоматически завершить конкурс или просто уведомить админа — тут просто уведомление в канал await bot.send_message( CHANNEL_ID, f"🎉 Набрано нужное число участников в конкурсе «{comp['name']}».\n" f"Можно выбрать победителя через бота." ) # Управление конкурсами @dp.callback_query(F.data == "manage_competitions") async def cb_manage_competitions(callback: types.CallbackQuery): uid = callback.from_user.id my_comps = [ cid for cid, c in competitions.items() if c["creator_id"] == uid and c["status"] in ("active", "draft") ] if not my_comps: await callback.answer("У вас нет активных конкурсов.", show_alert=True) return await callback.message.edit_text("Выберите конкурс для управления:", reply_markup=kb_manage_list(my_comps)) await callback.answer() @dp.callback_query(F.data.startswith("manage_comp_")) async def cb_manage_comp(callback: types.CallbackQuery): cid = callback.data.split("_", 2)[2] comp = competitions.get(cid) if not comp: await callback.answer("Конкурс не найден.", show_alert=True) return await callback.message.edit_text( f"Управление конкурсом: {comp['name']}\n" f"Статус: {comp['status']}\n" f"Участников: {len(comp['participants'])}/{comp['participants_count']}", reply_markup=kb_comp_actions(cid) ) await callback.answer() @dp.callback_query(F.data.startswith("choose_winner_")) async def cb_choose_winner(callback: types.CallbackQuery):

return # Тут можно дополнительно проверить права бота, но get_chat_member для бота в канале не всегда работает напрямую. # Для простоты считаем, что админ добавил бота как админа. except Exception as e: await callback.answer(f"Ошибка доступа к каналу: {e}", show_alert=True) return await callback.message.answer( "✅ Вы добавили меня в канал как админа.\n" "Теперь напишите название конкурса:" ) user_state[callback.from_user.id] = COMP_STEP_WAIT_NAME await callback.answer() @dp.message(F.text) async def handle_text(message: types.Message): uid = message.from_user.id step = user_state.get(uid) # Логика шагов создания конкурса if step == COMP_STEP_WAIT_NAME: name = message.text.strip() if len(name) < 2: await message.answer("Название должно быть длиннее 2 символов. Напишите ещё раз:") return user_state[uid] = COMP_STEP_WAIT_PHOTO await message.answer(f"Название: {name}.\nОтправьте фото для конкурса (или /skip, чтобы пропустить):") elif step == COMP_STEP_WAIT_PHOTO: if message.photo: photo_file_id = message.photo[-1].file_id user_state[uid] = (COMP_STEP_WAIT_PARTICIPANTS, photo_file_id) await message.answer("Фото сохранено. Теперь напишите, сколько нужно участников:") elif message.text and message.text.lower() == "/skip": user_state[uid] = (COMP_STEP_WAIT_PARTICIPANTS, None) await message.answer("Фото пропущено. Сколько нужно участников?") else: await message.answer("Отправьте фото или напишите /skip, чтобы пропустить. Или число участников:") elif isinstance(step, tuple) and step[0] == COMP_STEP_WAIT_PARTICIPANTS: photo_id = step[1] try: participants = int(message.text) if participants <= 0: raise ValueError except ValueError: await message.answer("Введите корректное число участников (больше 0):") return user_state[uid] = (COMP_STEP_WAIT_WINNERS, photo_id, participants) await message.answer(f"Нужно участников: {participants}. Сколько выбрать победителей?") elif isinstance(step, tuple) and step[0] == COMP_STEP_WAIT_WINNERS: photo_id, participants = step[1], step[2] try: winners = int(message.text) if winners <= 0 or winners > participants: raise ValueError except ValueError: await message.answer(f"Число победителей должно быть от 1 до {participants}. Напишите ещё раз:") return # Формируем черновик конкурса cid = f"c_{int(datetime.now().timestamp())}_{uid}" competitions[cid] = { "name": None, # заполним ниже "photo_id": photo_id, "participants_count": participants, "winners_count": winners, "creator_id": uid, "status": "draft", "channel_msg_id": None, "participants": [], } # Сохраняем название, которое мы не сохранили явно: нужно либо хранить в state, либо попросить повторно. # Упрощение: попросим ещё раз ввести название для финального подтверждения competitions[cid]["name"] = "Конкурс без названия" # заглушка, исправим в confirm user_state[uid] = (COMP_STEP_CONFIRM_PUBLISH, cid) await message.answer( f"📝 Параметры конкурса:\n" f"Фото: {'✅' if photo_id else '❌'}\n" f"Участников нужно: {participants}\n" f"Победителей: {winners}\n\n" f"Напишите название конкурса, затем бот предложит опубликовать в канал." ) elif isinstance(step, tuple) and step[0] == COMP_STEP_CONFIRM_PUBLISH: cid = step[1] name = message.text.strip() if len(name) < 2: await message.answer("Название слишком короткое. Напишите ещё раз:") return competitions[cid]["name"] = name comp = competitions[cid]

import asyncio import random from datetime import datetime from aiogram import Bot, Dispatcher, types, F from aiogram.filters import Command from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton from aiogram.utils.keyboard import InlineKeyboardBuilder # --- НАСТРОЙКИ --- BOT_TOKEN = "ВАШ_ТОКЕН_ОТ_BOTFATHER" CHANNEL_ID = "-100XXXXXXXXXX" # ID канала (с минусом для приватных) ADMINS = [123456789] # список ID админов (число), можно добавить несколько # Хранилища (в памяти, при рестарте пропадут) competitions = {} # id_конкурса: {data} user_stats = {} # user_id: {created_competitions: int} bot = Bot(token=BOT_TOKEN) dp = Dispatcher() # --- ВСПОМОГАТЕЛЬНЫЕ ФУНКЦИИ --- def get_user_profile(user: types.User) -> str: name = user.full_name role = "Админ" if user.id in ADMINS else "Пользователь" stats = user_stats.get(user.id, {"created_competitions": 0}) return ( f"👤 Профиль\n" f"Имя: {name}\n" f"Роль: {role}\n" f"Проведено конкурсов: {stats['created_competitions']}" ) def make_comp_key(chat_id: int, msg_id: int) -> str: return f"{chat_id}:{msg_id}" # --- КЛАВИАТУРЫ --- def kb_start(): builder = InlineKeyboardBuilder() builder.button(text="🎲 Создать конкурс", callback_data="create_competition") builder.button(text="📋 Управление конкурсами", callback_data="manage_competitions") builder.button(text="👤 Мой профиль", callback_data="profile") if ADMINS and True: builder.button(text="🛠 Админ-меню", callback_data="admin_menu") return builder.as_markup() def kb_manage_list(comp_ids): builder = InlineKeyboardBuilder() for cid in comp_ids: c = competitions.get(cid) if not c: continue text = f"🏆 {c['name']} ({c['participants_count']} уч.)" builder.button(text=text, callback_data=f"manage_comp_{cid}") builder.button(text="❌ Отмена", callback_data="cancel_manage") return builder.as_markup() def kb_comp_actions(cid: str): builder = InlineKeyboardBuilder() builder.button(text="✅ Выбрать победителя", callback_data=f"choose_winner_{cid}") builder.button(text="🗑 Отменить конкурс", callback_data=f"cancel_comp_{cid}") builder.button(text="🔙 Назад", callback_data="manage_competitions") return builder.as_markup() def kb_admin_list(): builder = InlineKeyboardBuilder() builder.button(text="📜 Список активных конкурсов", callback_data="admin_list_comps") builder.button(text="👥 Пользователи и конкурсы", callback_data="admin_users") builder.button(text="➕ Добавить админа", callback_data="admin_add_admin") builder.button(text="🔙 Назад", callback_data="admin_menu") return builder.as_markup() # --- МАШИНА СОСТОЯНИЙ (ПРОСТОЙ ВАРИАНТ) --- # Храним состояние пользователя: user_id -> step user_state = {} COMP_STEP_WAIT_NAME = "wait_name" COMP_STEP_WAIT_PHOTO = "wait_photo" COMP_STEP_WAIT_PARTICIPANTS = "wait_participants" COMP_STEP_WAIT_WINNERS = "wait_winners" COMP_STEP_CONFIRM_PUBLISH = "confirm_publish" ADMIN_STEP_WAIT_ADMIN_ID = "admin_wait_id" # --- ОБРАБОТЧИКИ КОМАНД И КОЛЛБЕКОВ --- @dp.message(Command("start")) async def cmd_start(message: types.Message): await message.answer("👋 Привет! Я бот-рандомайзер для конкурсов.", reply_markup=kb_start()) @dp.callback_query(F.data == "create_competition") async def cb_create_competition(callback: types.CallbackQuery): # Сначала проверяем, что бот добавлен в канал и имеет права админа try: chat = await bot.get_chat(CHANNEL_ID) member = await bot.get_chat_member(CHANNEL_ID, callback.from_user.id) # Если бот не админ в канале — просим добавить if chat.type != "channel": await callback.answer("Канал должен быть публичным или приватным каналом.", show_alert=True)

Хотите солью вам код Бота для рандомайзера (В друг в будущем надумаете создать)

Конкурс чтобы добить 1к сабов 60тапов, 25призовых 1. Новый приват каптера 2. Новый приват каптера 3. Новый приват каптера 4.
Конкурс чтобы добить 1к сабов 60тапов, 25призовых 1. Новый приват каптера 2. Новый приват каптера 3. Новый приват каптера 4. Старый приват каптера 5. Старый приват каптера Старый софт каптера (навсегда) 6. Новый софт каптера (на 2дня) 7.Приват бахмута 8. Приват шапика и верти 9. Приват Андрюши новый 10.Приват шизи 11. Приват Андрюши старый 12. Приват тана 13. Приват вертелы 14. Приват Хама и хашимуро 15. Приват зетикса 16. Приват простоузглянского 17. Приват гамбио 18. Реклама на 3часа(с закрепом) 19. Реклама на 1час (с закрепом) 20. Любой мк на панду на выбор 21/22. Капт сборка/ПК на 60фпс 23/25. Мини капт сборка 60фпс (21-25 это сборки на панду) Условия=подписку на тгк @Kapternasvage Раскид=100% выигрыш Удачи выиграть

Совместный розыгрыш с espino/Kapter От еспино👇👇 Чит asuracore Кастом чит От каптера 👇👇 Новая приватка каптера Старая прив
Совместный розыгрыш с espino/Kapter От еспино👇👇 Чит asuracore Кастом чит От каптера 👇👇 Новая приватка каптера Старая приватка каптера Старый софт каптера Любой мк на выбор Автослайды с автоджойстиком на 60фпс Итоги на 50тапов! Условия: подписку на @asuracore и @Kapternasvager Удачи выиграть в конкурсе;)

Первому покупателю подарок

Мне начать продавать делать на заказы опять боты?
Anonymous voting

СЕГОДНЯ АКЦИЯ СОФТА 250₽/250🔶 НАВСЕГДА

Всем привет выпустил софт на тф😱, для матрëшки рп Цена небольшая эффективность хорошая Что сейчас в софте на данный момент 🌟функции: Оружие в данном разделе можно включить бесконечные патроны включить/или выключить и убрать разброс выключить/включить Оптимизация когда ие нажимаете она стабилизирует фпс Счëтчик фпс когда вы нажимаете добавляется на экран актуальный счëтчик фпс Кнопка Пинг когда нажимаете показывает ваш Пинг Настройки в них вы сможете сдвинуть панель верх низ влево право В другое можно сделать обход фпс 250 или 500 ну или самим ввести до 1000 фпс также там есть стрелять без звука можно выключить/включить 👻Цена: 💎1 ключ на один вход: 15🔶/10₽ 🍙День: 30🔶/30₽ ❗Неделя: 85🔶/85₽ ✨месяц: 125🔶/125₽ 𑰽навсегда: 300🔶/300₽ Акция только СЕГОДНЯ!!!!! ✈️НАВСЕГДА: 250₽/250🔶 УСПЕВАЙТЕ!!! За покупкой/вопросами в лс @ouerp