# -- version --
__version__ = (1, 0, 0)
# -- version --
# ███╗░░░███╗███████╗░█████╗░██████╗░░█████╗░░██╗░░░░░░░██╗░██████╗░██████╗
# ████╗░████║██╔════╝██╔══██╗██╔══██╗██╔══██╗░██║░░██╗░░██║██╔════╝██╔════╝
# ██╔████╔██║█████╗░░███████║██║░░██║██║░░██║░╚██╗████╗██╔╝╚█████╗░╚█████╗░
# ██║╚██╔╝██║██╔══╝░░██╔══██║██║░░██║██║░░██║░░████╔═████║░░╚═══██╗░╚═══██╗
# ██║░╚═╝░██║███████╗██║░░██║██████╔╝╚█████╔╝░░╚██╔╝░╚██╔╝░██████╔╝██████╔╝
# ╚═╝░░░░░╚═╝╚══════╝╚═╝░░╚═╝╚═════╝░░╚════╝░░░░╚═╝░░░╚═╝░░╚═════╝░╚═════╝░
# © Copyright 2025
# ✈ https://t.me/mead0wssMods
# meta developer: @mead0wssMods x @nullmod
# scope: heroku_only
from .. import loader, utils
from herokutl.tl.functions.payments import GetPaymentFormRequest, SendStarsFormRequest
from herokutl.tl.types import InputInvoiceStarGift, TextWithEntities
from herokutl.errors.rpcerrorlist import BadRequestError
import logging
@loader.tds
class SenderGifts(loader.Module):
"""Модуль для отправки подарков"""
strings = {
"name": "SenderGifts",
"usage": "❌ Используйте в формате: .sendgift @username текст",
"checking_user": "🔍 Проверка пользователя...",
"user_not_found": "❌ Пользователь не найден",
"gift_menu": "🎁 Выберите подарок.\n\n👤 Пользователь: {}\n📄 Текст: {}",
"sending_gift": "🛫 Отправка подарка...",
"gift_sent": "✅ Подарок успешно отправлен!",
"not_enough_stars": "❌ Недостаточно звезд для отправки подарка {}!",
}
gifts = [
[
{"id": 5170145012310081615, "stars": 15, "emoji": "❤️", "name": "Сердце"},
{"id": 5170233102089322756, "stars": 15, "emoji": "🧸", "name": "Мишка"},
{"id": 5170250947678437525, "stars": 25, "emoji": "🎁", "name": "Подарок"},
],
[
{"id": 5168103777563050263, "stars": 25, "emoji": "🌹", "name": "Роза"},
{"id": 5170144170496491616, "stars": 50, "emoji": "🎂", "name": "Тортик"},
{"id": 5170314324215857265, "stars": 50, "emoji": "💐", "name": "Цветы"},
],
[
{"id": 5170564780938756245, "stars": 50, "emoji": "🚀", "name": "Ракета"},
{"id": 5168043875654172773, "stars": 100, "emoji": "🏆", "name": "Кубок"},
{"id": 5170690322832818290, "stars": 100, "emoji": "💍", "name": "Кольцо"},
]
]
async def client_ready(self, client, db):
self.client = client
@loader.command()
async def sendgift(self, message):
"""Отправить подарок пользователю"""
args = utils.get_args_raw(message)
if not args:
await utils.answer(message, self.strings["usage"])
return
parts = args.split(maxsplit=1)
if len(parts) < 1:
await utils.answer(message, self.strings["usage"])
return
username = parts[0]
text = parts[1] if len(parts) > 1 else ""
if username.startswith('@'):
username = username[1:]
msg = await utils.answer(message, self.strings["checking_user"])
try:
user = await self.client.get_entity(username)
except Exception as e:
logging.error(f"User not found: {e}")
await utils.answer(msg, self.strings["user_not_found"])
return
buttons = []
for row in self.gifts:
btn_row = []
for gift in row:
btn_row.append({
"text": gift["emoji"],
"callback": self._send_gift,
"args": (user.id, gift["id"], text, gift["emoji"], msg.id),
})
buttons.append(btn_row)
await utils.answer(
msg,
self.strings["gift_menu"].format(
f"@{user.username}" if user.username else user.first_name,
text if text else "-"
),
reply_markup=buttons
)
async def _send_gift(self, call, user_id, gift_id, text, gift_emoji, msg_id):
try:
await call.edit(
self.strings["sending_gift"],
reply_markup=None
)
user = await self.client.get_input_entity(user_id)
inv = InputInvoiceStarGift(
user,
gift_id,
message=TextWithEntities(text, []) if text else TextWithEntities("", [])
)
form = await self.client(GetPaymentFormRequest(inv))
result = await self.client(SendStarsFormRequest(form.form_id, inv))
await call.edit(self.strings["gift_sent"])
except BadRequestError as e:
if "BALANCE_TOO_LOW" in str(e):
await call.edit(
self.strings["not_enough_stars"].format(gift_emoji),
reply_markup=None
)
else:
logging.error(f"Error sending gift: {e}")
await call.edit(
f"❌ Ошибка при отправке подарка: {str(e)}",
reply_markup=None
)
except Exception as e:
logging.error(f"Error sending gift: {e}")
await call.edit(
f"❌ Ошибка при отправке подарка: {str(e)}",
reply_markup=None
)
# эрон Дон Дон