177 lines
21 KiB
Plaintext
177 lines
21 KiB
Plaintext
from telegram import Update, InlineKeyboardButton, InlineKeyboardMarkup
|
|
from telegram.ext import (
|
|
Updater,
|
|
CommandHandler,
|
|
MessageHandler,
|
|
Filters,
|
|
CallbackQueryHandler,
|
|
ConversationHandler,
|
|
CallbackContext,
|
|
)
|
|
import logging
|
|
|
|
# Enable logging
|
|
logging.basicConfig(
|
|
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s", level=logging.INFO
|
|
)
|
|
logger = logging.getLogger(__name__)
|
|
|
|
# States for the onboarding conversation
|
|
MEMECOIN_NAME, ISSUE_TOKEN = range(2)
|
|
|
|
# States for the promotion conversation
|
|
PROMO_TIME, PROMO_TIER, PAYMENT, VERIFY = range(4)
|
|
|
|
# Start command
|
|
def start(update: Update, context: CallbackContext) -> None:
|
|
update.message.reply_text(
|
|
"Welcome to XRPRocketBot! Use /configure to onboard your channel or /promotion to start a promotion."
|
|
)
|
|
|
|
|
|
# Onboarding conversation
|
|
def configure(update: Update, context: CallbackContext) -> int:
|
|
update.message.reply_text("Please enter your memecoin name:")
|
|
return MEMECOIN_NAME
|
|
|
|
def memecoin_name(update: Update, context: CallbackContext) -> int:
|
|
context.user_data["memecoin_name"] = update.message.text
|
|
update.message.reply_text("Please enter your issue token:")
|
|
return ISSUE_TOKEN
|
|
|
|
def issue_token(update: Update, context: CallbackContext) -> int:
|
|
context.user_data["issue_token"] = update.message.text
|
|
update.message.reply_text(
|
|
f"Thank you! Your channel '{context.user_data['memecoin_name']}' with token '{context.user_data['issue_token']}' is now onboarded."
|
|
)
|
|
return ConversationHandler.END
|
|
|
|
def cancel_onboarding(update: Update, context: CallbackContext) -> int:
|
|
update.message.reply_text("Onboarding cancelled. Use /configure to start again.")
|
|
return ConversationHandler.END
|
|
|
|
|
|
# Promotion conversation
|
|
def promotion(update: Update, context: CallbackContext) -> int:
|
|
keyboard = [
|
|
[InlineKeyboardButton("6 hours", callback_data="6")],
|
|
[InlineKeyboardButton("12 hours", callback_data="12")],
|
|
[InlineKeyboardButton("24 hours", callback_data="24")],
|
|
]
|
|
reply_markup = InlineKeyboardMarkup(keyboard)
|
|
update.message.reply_text(
|
|
"Please choose the duration of the promotion:", reply_markup=reply_markup
|
|
)
|
|
return PROMO_TIME
|
|
|
|
def promo_time(update: Update, context: CallbackContext) -> int:
|
|
query = update.callback_query
|
|
query.answer()
|
|
context.user_data["promo_time"] = query.data
|
|
query.edit_message_text(text=f"Selected duration: {query.data} hours. Now choose the tier:")
|
|
# Assume tiers are predefined
|
|
keyboard = [
|
|
[InlineKeyboardButton("Tier 1", callback_data="1")],
|
|
[InlineKeyboardButton("Tier 2", callback_data="2")],
|
|
[InlineKeyboardButton("Tier 3", callback_data="3")],
|
|
]
|
|
reply_markup = InlineKeyboardMarkup(keyboard)
|
|
query.message.reply_text("Choose the tier:", reply_markup=reply_markup)
|
|
return PROMO_TIER
|
|
|
|
def promo_tier(update: Update, context: CallbackContext) -> int:
|
|
query = update.callback_query
|
|
query.answer()
|
|
context.user_data["promo_tier"] = query.data
|
|
price = calculate_price(context.user_data["promo_time"], query.data)
|
|
query.edit_message_text(
|
|
text=f"Selected tier: {query.data}. The price is {price} XRP. Please deposit to the following wallet: XRP_WALLET_ADDRESS"
|
|
)
|
|
return PAYMENT
|
|
|
|
def calculate_price(time, tier):
|
|
# Dummy calculation
|
|
return int(time) * int(tier) * 10
|
|
|
|
def payment(update: Update, context: CallbackContext) -> int:
|
|
update.message.reply_text("Please enter the transaction hash:")
|
|
return VERIFY
|
|
|
|
def verify(update: Update, context: CallbackContext) -> int:
|
|
tx_hash = update.message.text
|
|
if check_transaction(tx_hash):
|
|
update.message.reply_text("Payment received! Your promotion is scheduled.")
|
|
else:
|
|
update.message.reply_text("Transaction not found. Please try again.")
|
|
return ConversationHandler.END
|
|
|
|
def check_transaction(tx_hash):
|
|
# Implement XRP transaction verification
|
|
return True # Placeholder
|
|
|
|
def cancel_promotion(update: Update, context: CallbackContext) -> int:
|
|
update.message.reply_text("Promotion cancelled. Use /promotion to start again.")
|
|
return ConversationHandler.END
|
|
|
|
|
|
# Help command
|
|
def help_command(update: Update, context: CallbackContext) -> None:
|
|
update.message.reply_text(
|
|
"Use /configure to onboard your channel or /promotion to start a promotion."
|
|
)
|
|
|
|
|
|
def main() -> None:
|
|
# Replace 'YOUR_TELEGRAM_BOT_TOKEN' with your bot's token
|
|
updater = Updater("YOUR_TELEGRAM_BOT_TOKEN")
|
|
|
|
dispatcher = updater.dispatcher
|
|
|
|
# Onboarding conversation handler
|
|
onboarding_conv_handler = ConversationHandler(
|
|
entry_points=[CommandHandler("configure", configure)],
|
|
states={
|
|
MEMECOIN_NAME: [MessageHandler(Filters.text & ~Filters.command, memecoin_name)],
|
|
ISSUE_TOKEN: [MessageHandler(Filters.text & ~Filters.command, issue_token)],
|
|
},
|
|
fallbacks=[CommandHandler("cancel", cancel_onboarding)],
|
|
)
|
|
|
|
# Promotion conversation handler
|
|
promotion_conv_handler = ConversationHandler(
|
|
entry_points=[CommandHandler("promotion", promotion)],
|
|
states={
|
|
PROMO_TIME: [CallbackQueryHandler(promo_time)],
|
|
PROMO_TIER: [CallbackQueryHandler(promo_tier)],
|
|
PAYMENT: [MessageHandler(Filters.text & ~Filters.command, payment)],
|
|
VERIFY: [MessageHandler(Filters.text & ~Filters.command, verify)],
|
|
},
|
|
fallbacks=[CommandHandler("cancel", cancel_promotion)],
|
|
)
|
|
|
|
# Add handlers to the dispatcher
|
|
dispatcher.add_handler(CommandHandler("start", start))
|
|
dispatcher.add_handler(CommandHandler("help", help_command))
|
|
dispatcher.add_handler(onboarding_conv_handler)
|
|
dispatcher.add_handler(promotion_conv_handler)
|
|
|
|
# Start the bot
|
|
updater.start_polling()
|
|
updater.idle()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|
|
}
|
|
)
|
|
}
|
|
)
|
|
)
|
|
)
|
|
]
|
|
)
|
|
]
|
|
)
|
|
)
|
|
)
|
|
) |