From 85eb05cf4be42839fda9cef0d96188d10d3fa616 Mon Sep 17 00:00:00 2001 From: Cheikh Oumar Gueye <122337043+x0flex@users.noreply.github.com> Date: Fri, 8 Sep 2023 06:49:24 +0000 Subject: [PATCH] Update main.py --- main.py | 235 ++++++++++++++++++++++++++++++++------------------------ 1 file changed, 136 insertions(+), 99 deletions(-) diff --git a/main.py b/main.py index 2df98a9..b75b0e1 100644 --- a/main.py +++ b/main.py @@ -1,125 +1,162 @@ import logging -import json import asyncio import sqlite3 import time - +import smtplib +from email.mime.text import MIMEText +from email.mime.multipart import MIMEMultipart from aiogram import Bot, Dispatcher, executor, types from aiogram.contrib.fsm_storage.memory import MemoryStorage from aiogram.dispatcher import FSMContext -from aiogram.dispatcher.filters import Text +from aiogram.dispatcher.filters import Text, Command from aiogram.dispatcher.filters.state import State, StatesGroup +from aiogram.types import ReplyKeyboardMarkup from config import API_TOKEN, admin -import keyboard as kb from onesec_api import Mailbox - -storage = MemoryStorage() logging.basicConfig(level=logging.INFO) bot = Bot(token=API_TOKEN) +storage = MemoryStorage() dp = Dispatcher(bot, storage=storage) - connection = sqlite3.connect('data.db') q = connection.cursor() - q.execute('CREATE TABLE IF NOT EXISTS users (user_id integer)') connection.commit() +menu_keyboard = ReplyKeyboardMarkup(resize_keyboard=True, one_time_keyboard=True) +menu_keyboard.add("✉️ Obtenir un mail", "🔐 Mot de passe", "✉️ Composer un e-mail") -class sender(StatesGroup): +class SenderStates(StatesGroup): text = State() - - -@dp.message_handler(content_types=['text'], text='✉️ Obtenir un mail') -async def takeamail(m: types.Message): - ma = Mailbox('') - email = f'{ma._mailbox_}@1secmail.com' - await m.answer( - '📫 Voici votre email: {}\nEnvoyer un mail.\n' - 'Votre boite mail sera vérifiée chaque 05 secondes pour de nouveaux messages!\n\n' - 'Le mail va expirer dans 10 minutes!!'.format(email), parse_mode='HTML') - timeout = 600 - timer = {} - timeout_start = time.time() - while time.time() < timeout_start + timeout: - test = 0 - if test == 5: - break - test -= 1 - mb = ma.filtred_mail() - if mb != 'not found': - for i in mb: - if i not in timer: - timer[i] = i - if isinstance(mb, list): - mf = ma.mailjobs('read', mb[0]) - js = mf.json() - fromm = js['from'] - theme = js['subject'] - mes = js['textBody'] - await m.answer(f'🔐 Nouveau message:\n\n📧 Email: {fromm}\n📄 Sujet: {theme}\n📝 Message: {mes}', reply_markup=kb.menu, parse_mode='HTML') - continue - await asyncio.sleep(5) - - -#@dp.message_handler(content_types=['text'], text='🔐 Mot de passe') -#async def randompass(m: types.Message): - #ma = Mailbox('') - #passw = ma.rand_pass_for('') - # await m.answer(f'🔑 Oui je génére un mot de passe pour vous: `{passw}`\n\n*Oui je génére un mot de passe pour vous', parse_mode='MarkdownV2') - - -@dp.message_handler(commands=['admin']) -async def adminstration(m: types.Message): - if m.chat.id == admin: - await m.answer('Bienvenue dans le panneau admin.', reply_markup=kb.apanel) - else: - await m.answer('Merde! Tu as piraté le serveur :(') - - -@dp.message_handler(content_types=['text']) -async def texthandler(m: types.Message): - q.execute(f"SELECT * FROM users WHERE user_id = {m.chat.id}") - result = q.fetchall() - if len(result) == 0: - uid = 'user_id' - sql = 'INSERT INTO users ({}) VALUES ({})'.format(uid, m.chat.id) - q.execute(sql) - connection.commit() - await m.answer(f'Bienvenue, {m.from_user.mention} Ce bot est conçu pour recevoir rapidement du courrier temporaire.Utilisez les boutons ci-dessous pour obtenir un email temporaire👇\n\n👨‍💻 Maintenu par @A_liou', reply_markup=kb.menu,parse_mode='HTML') - - -@dp.callback_query_handler(text='stats') -async def statistics(call): - row = q.execute('SELECT * FROM users').fetchall() - lenght = len(row) - await call.message.answer('Utilisateur totales: {}'.format(lenght)) - - -@dp.callback_query_handler(text='rass') -async def usender(call): - await call.message.answer('Saisissez le texte à envoyer.\n\nCliquez sur le bouton ci-dessous pour annuler 👇', reply_markup=kb.back) - await sender.text.set() - - -@dp.message_handler(state=sender.text) -async def process_name(message: types.Message, state: FSMContext): - info = q.execute('SELECT user_id FROM users').fetchall() - if message.text == 'Отмена': - await message.answer('Annuler! Retour au menu principal.', reply_markup=kb.menu) + to_email = State() + to_subject = State() + to_body = State() + +@dp.message_handler(commands=['start']) +async def start(message: types.Message): + await message.answer( + f"Bienvenue, {message.from_user.first_name} !\n" + "Ce bot est conçu pour recevoir rapidement du courrier temporaire.\n" + "Utilisez les boutons ci-dessous pour obtenir un email temporaire, générer un mot de passe ou composer un e-mail.", + reply_markup=menu_keyboard, + ) + +@dp.message_handler(lambda message: message.text == "✉️ Obtenir un mail") +async def get_temp_email(message: types.Message): + try: + ma = Mailbox('') + email = f'{ma._mailbox_}@1secmail.com' + await message.answer( + '📫 Voici votre email: {}\nEnvoyer un mail.\n' + 'Votre boite mail sera vérifiée chaque 05 secondes pour de nouveaux messages!\n\n' + 'Le mail va expirer dans 10 minutes!!'.format(email), parse_mode='HTML' + ) + timeout = 600 + timer = {} + timeout_start = time.time() + while time.time() < timeout_start + timeout: + test = 0 + if test == 5: + break + test -= 1 + mb = ma.filtred_mail() + if mb != 'not found': + for i in mb: + if i not in timer: + timer[i] = i + if isinstance(mb, list): + mf = ma.mailjobs('read', mb[0]) + js = mf.json() + fromm = js['from'] + theme = js['subject'] + mes = js['textBody'] + await message.answer(f'🔐 Nouveau message:\n\n📧 Email: {fromm}\n📄 Sujet: {theme}\n📝 Message: {mes}', reply_markup=menu_keyboard, parse_mode='HTML') + continue + await asyncio.sleep(5) + except Exception as e: + logging.error(f"Erreur lors de la récupération de l'e-mail temporaire : {e}") + await message.answer("Une erreur s'est produite. Veuillez réessayer plus tard.") + +@dp.message_handler(lambda message: message.text == "🔐 Mot de passe") +async def generate_password(message: types.Message): + try: + + password = "passe123" + await message.answer(f"Mot de passe généré : {password}") + except Exception as e: + logging.error(f"Erreur lors de la génération du mot de passe : {e}") + await message.answer("Une erreur s'est produite. Veuillez réessayer plus tard.") + +@dp.message_handler(lambda message: message.text == "✉️ Composer un e-mail") +async def compose_email(message: types.Message): + try: + await message.answer("Veuillez saisir l'adresse e-mail du destinataire :") + await SenderStates.to_email.set() + except Exception as e: + logging.error(f"Erreur lors de la composition de l'e-mail : {e}") + await message.answer("Une erreur s'est produite. Veuillez réessayer plus tard.") + +@dp.message_handler(state=SenderStates.to_email) +async def to_email(message: types.Message, state: FSMContext): + try: + async with state.proxy() as data: + data['to_email'] = message.text + + await message.answer("Veuillez saisir le sujet de l'e-mail :") + await SenderStates.to_subject.set() + except Exception as e: + logging.error(f"Erreur lors de la saisie de l'adresse e-mail du destinataire : {e}") + await message.answer("Une erreur s'est produite. Veuillez réessayer plus tard.") + +@dp.message_handler(state=SenderStates.to_subject) +async def to_subject(message: types.Message, state: FSMContext): + try: + async with state.proxy() as data: + data['subject'] = message.text + + await message.answer("Veuillez saisir le corps de l'e-mail :") + await SenderStates.to_body.set() + except Exception as e: + logging.error(f"Erreur lors de la saisie du sujet de l'e-mail : {e}") + await message.answer("Une erreur s'est produite. Veuillez réessayer plus tard.") + +@dp.message_handler(state=SenderStates.to_body) +async def to_body(message: types.Message, state: FSMContext): + try: + async with state.proxy() as data: + data['body'] = message.text + + sender_email = "codingmailer@gmail.com" # ton adresse e-mail + sender_password = "votre_mot_de_passe" # mot de passe + + subject = data['subject'] + body = data['body'] + to_email = data['to_email'] + + msg = MIMEMultipart() + msg.attach(MIMEText(body, 'plain')) + msg['From'] = sender_email + msg['To'] = to_email + msg['Subject'] = subject + + server = smtplib.SMTP('smtp.gmail.com', 587) + server.starttls() + server.login(sender_email, sender_password) + + text = msg.as_string() + server.sendmail(sender_email, to_email, text) + + server.quit() + + await message.answer("E-mail envoyé avec succès !") + except Exception as e: + logging.error(f"Erreur lors de l'envoi de l'e-mail : {e}") + await message.answer("Une erreur s'est produite lors de l'envoi de l'e-mail. Veuillez réessayer plus tard.") + + finally: await state.finish() - else: - await message.answer('Patientez...', reply_markup=kb.menu) - for i in range(len(info)): - try: - await bot.send_message(info[i][0], str(message.text)) - except: - pass - await message.answer('Distribution terminée.') - await state.finish() - if __name__ == '__main__': - executor.start_polling(dp, skip_updates=True) + executor.start_polling(dp, skip_updates=True)