Did some modifications...
This commit is contained in:
@@ -33,11 +33,11 @@ async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):
|
||||
raffle = get_raffle(raffle_id) # Get raffle details
|
||||
remaining_numbers_amount = get_remaining_numbers_amount(raffle_id)
|
||||
if raffle and raffle['active'] and remaining_numbers_amount > 0:
|
||||
# Check what time is it, if it's between 20:55 and 22:00, users can't join
|
||||
# Check what time is it, if it's between 21:15 and 22:00, users can't join
|
||||
madrid_tz = pytz.timezone("Europe/Madrid")
|
||||
current_time = datetime.now(madrid_tz)
|
||||
if current_time.time() >= dtime(20, 55) and current_time.time() <= dtime(22, 0):
|
||||
await update.message.reply_text("Lo siento, no puedes unirte a sorteos entre las 20:55 y las 22:00 (hora de España) para evitar conflictos con el sorteo en directo. Inténtalo de nuevo más tarde.")
|
||||
if current_time.time() >= dtime(21, 15) and current_time.time() <= dtime(22, 0):
|
||||
await update.message.reply_text("Lo siento, no puedes unirte a sorteos entre las 21:15 y las 22:00 (hora de España) para evitar conflictos con el sorteo en directo. Inténtalo de nuevo más tarde.")
|
||||
return
|
||||
if len(get_reserved_numbers(user.id, raffle_id)) > 0:
|
||||
await update.message.reply_text("Ya tienes participaciones reservadas para este sorteo. Por favor, completa la donación o espera a que caduquen antes de unirte de nuevo.")
|
||||
@@ -48,13 +48,23 @@ async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):
|
||||
logger.info(f"User {user.id} started bot with join link for raffle {raffle_id}")
|
||||
context.user_data['joining_raffle_id'] = raffle_id
|
||||
keyboard = generate_numbers_keyboard(raffle_id, user.id)
|
||||
await update.message.reply_text(
|
||||
f"¡Hola! Vamos a unirnos al sorteo '{raffle['name']}'.\n\n"
|
||||
f"🌍 Envío internacional: {'Sí ✅' if raffle['international_shipping'] else 'No ❌'}\n"
|
||||
f"La donación mínima es de {raffle['price']}€.\n\n"
|
||||
"Por favor, selecciona tus números:",
|
||||
reply_markup=keyboard
|
||||
)
|
||||
is_vip = is_vip_member_of_homelabs(user.id)
|
||||
if is_vip:
|
||||
await update.message.reply_text(
|
||||
f"¡Hola usuario VIP! Vamos a unirnos al sorteo '{raffle['name']}'.\n\n"
|
||||
f"🌍 Envío internacional: {'Sí ✅' if raffle['international_shipping'] else 'No ❌'}\n"
|
||||
f"La donación mínima es de {raffle['price'] - VIP_DISCOUNT_PER_NUMBER}€.\n\n"
|
||||
"Por favor, selecciona tus números:",
|
||||
reply_markup=keyboard
|
||||
)
|
||||
else:
|
||||
await update.message.reply_text(
|
||||
f"¡Hola! Vamos a unirnos al sorteo '{raffle['name']}'.\n\n"
|
||||
f"🌍 Envío internacional: {'Sí ✅' if raffle['international_shipping'] else 'No ❌'}\n"
|
||||
f"La donación mínima es de {raffle['price']}€.\n\n"
|
||||
"Por favor, selecciona tus números:",
|
||||
reply_markup=keyboard
|
||||
)
|
||||
else:
|
||||
await update.message.reply_text("Este sorteo ya no está activo o no tiene números disponibles.")
|
||||
except (ValueError, IndexError):
|
||||
@@ -225,8 +235,24 @@ async def confirm_creation(update: Update, context: ContextTypes.DEFAULT_TYPE) -
|
||||
channel_id = user_data.get('channel')
|
||||
international_shipping = user_data.get('international_shipping', 0)
|
||||
|
||||
if not all([name, description, image_file_id, price, international_shipping]):
|
||||
await context.bot.send_message(query.from_user.id, "Faltan datos. Creación cancelada.")
|
||||
exists_international_shipping = False
|
||||
if international_shipping != None:
|
||||
exists_international_shipping = True
|
||||
|
||||
if not all([name, description, image_file_id, price, exists_international_shipping]):
|
||||
missing_fields = []
|
||||
if not name:
|
||||
missing_fields.append("título")
|
||||
if not description:
|
||||
missing_fields.append("descripción")
|
||||
if not image_file_id:
|
||||
missing_fields.append("imagen")
|
||||
if not price:
|
||||
missing_fields.append("precio")
|
||||
if not exists_international_shipping:
|
||||
missing_fields.append("envío internacional")
|
||||
|
||||
await context.bot.send_message(query.from_user.id, f"Faltan datos: {', '.join(missing_fields)}. Creación cancelada.")
|
||||
context.user_data.pop('new_raffle', None)
|
||||
return ConversationHandler.END
|
||||
|
||||
@@ -528,6 +554,12 @@ async def confirm_callback(update: Update, context: CallbackContext):
|
||||
return
|
||||
|
||||
user_name = participant['user_name']
|
||||
|
||||
is_vip = is_vip_member_of_homelabs(user_id)
|
||||
if is_vip:
|
||||
price_per_number -= VIP_DISCOUNT_PER_NUMBER
|
||||
if price_per_number < 1:
|
||||
price_per_number = 1 # Minimum price
|
||||
total_price = len(reserved_numbers) * price_per_number
|
||||
|
||||
paypal_link, invoice_id = create_paypal_order(get_paypal_access_token(), total_price, raffle_info['id'], reserved_numbers, user_name)
|
||||
@@ -680,16 +712,19 @@ async def end_raffle_logic(context: ContextTypes.DEFAULT_TYPE, raffle_id: int, w
|
||||
|
||||
# Notify admin of success
|
||||
try:
|
||||
number_of_participations = get_total_participations(raffle_id)
|
||||
price_per_number = raffle_details['price']
|
||||
total_gross = 0
|
||||
total_net = 0
|
||||
total_fees = 0
|
||||
invoice_ids = get_all_invoice_ids(raffle_id)
|
||||
for inv_id in invoice_ids:
|
||||
gross, net, fees = get_paypal_amounts_for_invoice(inv_id)
|
||||
total_gross += gross
|
||||
total_net += net
|
||||
total_fees += fees
|
||||
for admin_user_id in ADMIN_IDS:
|
||||
await context.bot.send_message(admin_user_id, f"Sorteo '{raffle_name}' terminado y ganadores anunciados.")
|
||||
number_of_participations = get_total_participations(raffle_id)
|
||||
price_per_number = raffle_details['price']
|
||||
invoice_ids = get_all_invoice_ids(raffle_id)
|
||||
for inv_id in invoice_ids:
|
||||
gross, net, fees = get_paypal_amounts_for_invoice(inv_id)
|
||||
total_gross += gross
|
||||
total_net += net
|
||||
total_fees += fees
|
||||
await context.bot.send_message(
|
||||
admin_user_id,
|
||||
f"Resumen del sorteo '{raffle_name}':\n"
|
||||
@@ -788,6 +823,26 @@ async def admin_menu_callback(update: Update, context: ContextTypes.DEFAULT_TYPE
|
||||
logger.error(f"Invalid callback data for announce raffle: {data}")
|
||||
await query.edit_message_text("Error: ID de sorteo inválido.", reply_markup=generate_admin_list_raffles_keyboard())
|
||||
|
||||
elif data.startswith(ADMIN_UPDATE_IMAGE_PREFIX):
|
||||
try:
|
||||
raffle_id = int(data[len(ADMIN_UPDATE_IMAGE_PREFIX):])
|
||||
logger.info(f"Admin {user_id} requested image update for raffle {raffle_id}")
|
||||
await query.edit_message_text(f"🔄 Actualizando imagen del sorteo {get_raffle_name(raffle_id)}...", reply_markup=None)
|
||||
|
||||
# Use the extracted function to send/update the raffle image
|
||||
if send_raffle_update_image(raffle_id, bot_token=context.bot.token):
|
||||
await context.bot.send_message(user_id, f"✅ Imagen actualizada correctamente para el sorteo {get_raffle_name(raffle_id)}.")
|
||||
else:
|
||||
await context.bot.send_message(user_id, f"❌ Error al actualizar la imagen para el sorteo {get_raffle_name(raffle_id)}.")
|
||||
|
||||
# Go back to raffle details
|
||||
details_text = format_raffle_details(raffle_id)
|
||||
details_keyboard = generate_admin_raffle_details_keyboard(raffle_id)
|
||||
await context.bot.send_message(user_id, details_text, reply_markup=details_keyboard, parse_mode=ParseMode.HTML)
|
||||
except (ValueError, IndexError):
|
||||
logger.error(f"Invalid callback data for update image: {data}")
|
||||
await query.edit_message_text("Error: ID de sorteo inválido.", reply_markup=generate_admin_list_raffles_keyboard())
|
||||
|
||||
elif data.startswith(ADMIN_END_RAFFLE_PROMPT_PREFIX):
|
||||
try:
|
||||
raffle_id = int(data[len(ADMIN_END_RAFFLE_PROMPT_PREFIX):])
|
||||
@@ -902,7 +957,7 @@ async def _announce_raffle_in_channels(context: ContextTypes.DEFAULT_TYPE, raffl
|
||||
|
||||
raffle_name = raffle['name']
|
||||
image_file_id = raffle['image_file_id']
|
||||
raffle_description = raffle['description'] # Get description for caption
|
||||
raffle_description = raffle['description'][:350] # Get description for caption
|
||||
price = raffle['price']
|
||||
channel_id_str = raffle['channel_id']
|
||||
|
||||
|
||||
Reference in New Issue
Block a user