Перейти до змісту

Рекомендовані відповіді

Опубліковано
  • Адміністратор

Telegram бот тимчасова пошта на Python

Багато хто попросив мене писати на aiogram а не telebot, ну так ось я написав бота наaiogram. За допомогою даного бот можна створити тимчасову пошту, але є такий же бот тільки на telebot але мій бот краще тому що він на aiogram! Ну от чого мучити очікування, уявляю вам цього робота.

Функціонал:
• Можливість створення тимчасової пошти.
• Ну, а так все!

Скріншоти бота:

Screenshot_1.png

А ось і сам код:

from aiogram import Bot, Dispatcher, types, F
from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton, ReplyKeyboardMarkup, KeyboardButton
from aiogram.filters import Command
import asyncio
import aiohttp
import json
API_TOKEN = 'Ваш токен'
onesecmail = 'https://www.1secmail.com/api/v1/'
bot = Bot(token=API_TOKEN)
dp = Dispatcher()
user_emails = {}def get_main_keyboard():
    keyboard = ReplyKeyboardMarkup(
        keyboard=[
            [KeyboardButton(text=" Получить новую почту")],
            [KeyboardButton(text=" Проверить почту")],
            [KeyboardButton(text=" Мой email")]
        ],
        resize_keyboard=True
    )
    return [email protected](Command('start'))async def start_cmd(message: types.Message):
    await message.answer(
        "Приветствую вас в боте для создания временных почт!\n"
        "Используйте кнопки ниже для управления:",
        reply_markup=get_main_keyboard()
    )@dp.message(F.text == " Получить новую почту")async def get_temp_mail(message: types.Message):
    async with aiohttp.ClientSession() as session:
        async with session.get(f'{onesecmail}?action=genRandomMailbox&count=1') as response:
            email = (await response.json())[0]
            user_emails[message.from_user.id] = email
            
            await message.answer(
                f" Ваш новый временный email:\n`{email}`\n\n"
                "Используйте кнопку « Проверить почту» для проверки входящих сообщений",
                parse_mode="Markdown"
            )@dp.message(F.text == " Мой email")async def show_current_email(message: types.Message):
    user_id = message.from_user.id
    if user_id not in user_emails:
        await message.answer(
            " У вас пока нет временной почты.\n"
            "Нажмите « Получить новую почту» чтобы создать почтовый ящик."
        )
        return
    
    await message.answer(
        f" Ваш текущий email:\n`{user_emails[user_id]}`",
        parse_mode="Markdown"
    )@dp.message(F.text == " Проверить почту")async def check_mail(message: types.Message):
    user_id = message.from_user.id
    if user_id not in user_emails:
        await message.answer(
            " Сначала получите временную почту!\n"
            "Нажмите « Получить новую почту»"
        )
        return
        
    email = user_emails[user_id]
    username, domain = email.split('@')
    
    async with aiohttp.ClientSession() as session:
        async with session.get(
            f'{onesecmail}?action=getMessages&login={username}&domain={domain}'
        ) as response:
            messages = await response.json()
            
            if not messages:
                await message.answer(" Входящих сообщений нет")
                return
                
            for msg in messages:
                keyboard = InlineKeyboardMarkup(inline_keyboard=[
                    [InlineKeyboardButton(
                        text=" Читать сообщение",
                        callback_data=f"read_msg_{msg['id']}"
                    )]
                ])
                
                await message.answer(
                    f" Новое сообщение:\n"
                    f"От: {msg['from']}\n"
                    f"Тема: {msg['subject']}\n"
                    f"Дата: {msg['date']}",
                    reply_markup=keyboard
                )@dp.callback_query(F.data.startswith("read_msg_"))async def read_message(callback: types.CallbackQuery):
    msg_id = callback.data.split('_')[2]
    user_id = callback.from_user.id
    email = user_emails[user_id]
    username, domain = email.split('@')
    
    async with aiohttp.ClientSession() as session:
        async with session.get(
            f'{onesecmail}?action=readMessage&login={username}&domain={domain}&id={msg_id}'
        ) as response:
            msg_data = await response.json()
            
            await callback.message.answer(
                f" Сообщение:\n\n"
                f"От: {msg_data['from']}\n"
                f"Тема: {msg_data['subject']}\n"
                f"Дата: {msg_data['date']}\n"
                f"Текст:\n\n{msg_data['textBody']}",
                parse_mode="HTML"
            )
    
    await callback.answer()async def main():
    await dp.start_polling(bot)if __name__ == '__main__':
    asyncio.run(main())

Необхідні бібліотеки для роботи:
pip install aiogram aiohttp

Для публікації повідомлень створіть обліковий запис або авторизуйтесь

Важлива інформація

By using this site, you agree to our Умови використання.