привет

привет


можешб пожалуйста добавить в код этого бота( а конкретне там где команды которые отправляют рандомный пост с канала) возможность отправлять реплаем (тоесть ответом на сообщение после команд человеку, а не чт о бы он отправлял просто в чат) начиная с команд а еще мне нужно что бы ты добавил еще одну команду /fm которая тоже будет кидать из другого канала посты. Вот сам код: ```python from aiogram import Bot, Dispatcher, types
from aiogram.utils import executor
from aiogram.dispatcher.filters.state import State, StatesGroup
from aiogram.contrib.middlewares.logging import LoggingMiddleware
from aiogram.dispatcher import FSMContext
from random import randint
import asyncio
import random
import glob
import json

TOKEN = '7008444204:AAHbFV1q79TK9MW33KvJ3eCDprzDUygfpbU'
CHANNEL_ID = '@buruaka_collection'
ANOTHER_CHANNEL_ID = '-1002014517550'
bot = Bot(token=TOKEN)
dp = Dispatcher(bot)
dp.middleware.setup(LoggingMiddleware())

user_folders = {}

class Form(StatesGroup):
folder = State()

LOG_STATS_FILE = 'log_stats.json'

def load_stats():
try:
with open(LOG_STATS_FILE, 'r') as file:
return json.load(file)
except (FileNotFoundError, json.JSONDecodeError):
return {}

def save_stats(stats):
with open(LOG_STATS_FILE, 'w') as file:
json.dump(stats, file, indent=4)

async def log_command_usage(command_name: str, user_id: int):
stats = load_stats()
if command_name not in stats:
stats[command_name] = {}
if user_id not in stats[command_name]:
stats[command_name][user_id] = 0
stats[command_name][user_id] += 1
save_stats(stats)
@dp.message_handler(commands=['start'])
async def send_welcome(message: types.Message):
await message.reply(f"Здарова уебан с ником {message.from_user.first_name} \nИспользуй /r для случайной хуйни . \nИспользуй /r <число> для отправки нескольких медиа. Используй /config <номер папки> для изменения текущей папки\nИспользуй /rc для отпрвки рандомной хуйни с канала\nИспользуй /rct для отправки рандомной хуйни с другого канала.")

@dp.message_handler(commands=['r']) # Тут добавляем нашу новую команду /r
async def send_random_media(message: types.Message):
await log_command_usage('r', message.from_user.id)

args = message.get_args().split(maxsplit=1)
count = int(args[0]) if args and args[0].isdigit() else 1

user_id = message.from_user.id
folder = user_folders.get(user_id, "/storage/emulated/0/DCIM/100PINT/Пины")

# Тут магическая строчка, которая теперь ищет и фотки, и видео
files = glob.glob(f'{folder}/*.*') # Вуаля, это и есть магия

if not files:
await message.reply("Медиафайлы в текущей папке не найдены :(")
return

random.shuffle(files) # Перемешиваем всё для случайности
selected_files = files[:min(count, len(files))]

media = types.MediaGroup()
for file in selected_files:
if file.endswith('.jpg') or file.endswith('.png'):
media.attach_photo(types.InputFile(file))
elif file.endswith('.mp4'):
media.attach_video(types.InputFile(file))
await message.reply_media_group(media=media)

@dp.message_handler(commands=['config'])
async def set_config(message: types.Message):
# Тут все как было, просто братик, ничего не меняем
await log_command_usage('folder', message.from_user.id)

args = message.get_args().split(maxsplit=1)
if args:
folder_number = args[0]
user_id = message.from_user.id
folder_mapping = {"1": "/storage/emulated/0/DCIM/100PINT/Пины", "2": "/storage/emulated/0/DCIM/100PINT/Порно", "3": "/storage/emulated/0/Pictures/Tumblr", "4": "/storage/emulated/0/Pictures/pixiv","5": "/storage/emulated/0/Папка",}
if folder_number in folder_mapping:
user_folders[user_id] = folder_mapping[folder_number]
await message.reply(f"Терь будем пользоваться папкой {folder_mapping[folder_number]} 🔄")
else:
await message.reply("Эй, неверный номер папки, давай еще разок.")
else:
await message.reply("ебучий караул, дай номер папки после /config, типа /config 2.")

async def send_random_post(chat_id):
total_posts = await bot.get_chat_member_count(CHANNEL_ID) # Ай-ай-ай, на борту все системы готовы
random_post_id = randint(18, 5281)
try:
# Вызываем духи рандома и отправляем пост
message = await bot.copy_message(chat_id=chat_id, from_chat_id=CHANNEL_ID, message_id=random_post_id)
except Exception as e:
print(f"Oops... не удалось скопировать пост в {chat_id}: {e}")

# Вот она, волшебная команда
@dp.message_handler(commands=['rc'])
async def random_post_command(message: types.Message):
await send_random_post(message.chat.id)
async def send_random_post_from_another_channel(chat_id):
total_posts = await bot.get_chat_member_count(ANOTHER_CHANNEL_ID) # Посчитаем посты для другого канала
random_post_id = randint(3, 196) # Вау, и тут свой рандом для него
try:
message = await bot.copy_message(chat_id=chat_id, from_chat_id=ANOTHER_CHANNEL_ID, message_id=random_post_id)
except Exception as e:
print(f"Oops... не получилось скопировать пост в {chat_id} из другого канала: {e}")

# Добавляем уникальную обработку команды /rct
@dp.message_handler(commands=['rct'])
async def random_post_from_another_channel_command(message: types.Message):
# Спецом для другого канала вызываем нашу новую функцию
await send_random_post_from_another_channel(message.chat.id)

@dp.message_handler(commands=['stats'])
async def send_stats(message: types.Message):
# Здесь без изменений, всё круто
stats = load_stats()
unique_users = set()
for command, users in stats.items():
unique_users.update(users.keys())
await message.reply(f"Ого,сколько пидорасов заюзали бота {len(unique_users)}!")

if __name__ == '__main__':
executor.start_polling(dp, skip_updates=True)```

Report Page