Bot

 import re

import random

from telegram import Update, Bot

from telegram.ext import Updater, CommandHandler, MessageHandler, Filters, CallbackContext


# Replace 'YOUR_BOT_TOKEN' with your actual bot token from BotFather

TOKEN = 'YOUR_BOT_TOKEN'

HASHTAG_COOLDOWN = {}  # To prevent spamming suggestions


def start(update: Update, context: CallbackContext) -> None:

    update.message.reply_text(

        "šŸ›Ž️ Welcome to Hashtag Helper Bot!\n\n"

        "I'll help you manage hashtags in this chat:\n"

        "- I'll remind you to add hashtags if your message doesn't have any\n"

        "- Use /suggest to get hashtag suggestions\n"

        "- Use /generate <text> to get auto-generated hashtags"

    )


def suggest_hashtags(update: Update, context: CallbackContext) -> None:

    suggestions = [

        "#GoodMorning ☀️", "#MotivationMonday šŸ’Ŗ", "#Inspiration ✨",

        "#DailyThoughts šŸ’­", "#LifeHacks šŸ› ️", "#FunFact šŸ¤“",

        "#ProTip šŸ’”", "#QuestionOfTheDay ❓", "#ChallengeAccepted šŸ†"

    ]

    update.message.reply_text(

        "šŸ“Œ Popular Hashtag Suggestions:\n\n" + 

        "\n".join(random.sample(suggestions, 5)) +

        "\n\nšŸ’” Tip: Combine popular and niche hashtags for better reach!"

    )


def generate_hashtags(update: Update, context: CallbackContext) -> None:

    if not context.args:

        update.message.reply_text("Please provide some text after /generate")

        return

    

    text = ' '.join(context.args).lower()

    words = re.findall(r'\w+', text)

    generated = list(set(['#' + word.capitalize() for word in words if len(word) > 3]))

    

    if not generated:

        update.message.reply_text("🤷 Couldn't generate hashtags from that text")

        return

    

    update.message.reply_text(

        "šŸ”„ Generated Hashtags:\n\n" +

        " ".join(generated[:10]) +  # Limit to 10 hashtags

        "\n\n⚠️ Always check hashtag relevance before posting!"

    )


def check_hashtags(update: Update, context: CallbackContext) -> None:

    message = update.message

    user_id = message.from_user.id

    

    # Ignore messages from channels or other bots

    if message.sender_chat or (message.from_user and message.from_user.is_bot):

        return

    

    # Check both message text and caption (for media messages)

    text = message.text or message.caption or ""

    hashtags = re.findall(r'#\w+', text)

    

    # If no hashtags found and message isn't too short

    if not hashtags and len(text) > 15:

        # Cooldown check (1 reminder per 5 minutes per user)

        last_reminder = HASHTAG_COOLDOWN.get(user_id, 0)

        if (message.date.timestamp() - last_reminder) > 300:

            HASHTAG_COOLDOWN[user_id] = message.date.timestamp()

            reply = message.reply_text(

                "šŸ”” Don't forget to add relevant hashtags!\n"

                "Use /suggest for ideas or /generate to auto-create hashtags",

                quote=False

            )

            # Delete reminder after 60 seconds

            context.job_queue.run_once(

                lambda _: reply.delete(),

                60,

                context=reply.chat_id

            )


def main() -> None:

    bot = Bot(token=TOKEN)

    updater = Updater(bot=bot, use_context=True)

    dp = updater.dispatcher


    dp.add_handler(CommandHandler("start", start))

    dp.add_handler(CommandHandler("suggest", suggest_hashtags))

    dp.add_handler(CommandHandler("generate", generate_hashtags))

    dp.add_handler(MessageHandler(Filters.all & ~Filters.command, check_hashtags))


    updater.start_polling()

    updater.idle()


if __name__ == '__main__':

    main()

Comments