Как я могу отправить электронное письмо с помощью моего бота Discord

#python #email #discord #command #discord.py

#python #Адрес электронной почты #Discord #команда #discord.py

Вопрос:

Я пытался отправить электронное письмо с помощью моего бота, который я создал, и я написал код до сих пор (показано ниже). Код для отправки электронного письма работает, я его протестировал, но я не уверен, как реализовать его в моем боте discord, поэтому, когда он получает команду (например : : email johnnyappleseed@gmail.com «привет, как дела?» будет иметь получателя johnnyappleseed @gmail, а текст письма будетбыть «желтым, как дела?»). Код для метода электронной почты находится внизу, но я включил весь код для своего бота.

Ниже приведен мой код для всего моего бота:

 import discord
import random
import smtplib, ssl 
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders
from email.mime.multipart import MIMEMultipart
from keepAlive import keepAlive
import os
from discord.ext import commands

client = discord.Client()

@client.event 
async def on_ready():
  print('Logged on as {0.user}'.format(client))

@client.event
async def on_message(message):

  content = message.content.lower()
  QiqiLines = ['I am Qiqi. I am a zombie. I forgot what comes next.', 'Did you ask me something? Sorry... I forgot.', 'Hold my hand please. This wind could blow me away.', 'I want to build a snowman. Will you help?', 'I like coconut milk... But, I dont know what it tastes like.' ,'All of this is because of you. Thank you very much. Can you make me a promise? From now on, please, let me protect you. Do you accept? Yes or no?']



  if message.author == client.user:
    return

  if message.content.startswith(':hello'):
    await message.channel.send('I am Qiqi. I am a zombie. I forgot what comes next.')  

  if message.content.startswith(':qiqi'):
    out = QiqiLines[random.randint(0,len(QiqiLines)-1)]
    await message.channel.send(out)


  if('ganyu') in content:
    await message.channel.send('Did someone say Ganyu? Is Ganyu here? Qiqi would like some cocomilk please!')


  if message.content.startswith(':help'):
    helpMessage = (":help - qiqi will help! n:hello - says hi to me! Qiqi! n:qiqi - i say something cool nganyu - is cocogoat here?")

    await message.channel.send(helpMessage)

async def email(ctx, arg1, arg2):
  sender = 'botqiqi2515@gmail.com'
  receiver = arg1
  bodySend = arg2
  msg = MIMEText(bodySend, 'html')
  msg['Subject'] = 'Hi! I am Qiqi'
  msg['From'] = sender
  msg['To'] = receiver
  s = smtplib.SMTP_SSL(host = 'smtp.gmail.com', port = 465)
  s.login(user = sender, password = os.getenv('GMAILPASS'))
  s.sendmail(sender, receiver, msg.as_string())
  s.quit()


  
keepAlive()
client.run(os.getenv('TOKEN'))
 

Ниже приведен мой код для части электронной почты в отдельном файле тестирования (эта часть работает, я ее протестировал):

 
import random
import smtplib, ssl 
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders
from email.mime.multipart import MIMEMultipart
import os


sender = 'botqiqi2515@gmail.com'
receiver = 'johnnyappleseed@gmail.com'
bodySend = "Hello"

msg = MIMEText(bodySend, 'html')
msg['Subject'] = 'Hi! I am Qiqi'
msg['From'] = sender
msg['To'] = receiver
s = smtplib.SMTP_SSL(host = 'smtp.gmail.com', port = 465)
s.login(user = sender, password = os.getenv('GMAILPASS'))
s.sendmail(sender, receiver, msg.as_string())
s.quit()
 

Как вы можете видеть из письма async def(ctx, arg1, arg2): метод в нижней части моего кода для всего бота, я написал код для метода получения 2 параметров: электронное письмо получателя и абзац тела. Я не уверен, куда идти дальше, когда пользователь discord запускает команду, и мой бот обнаруживает эту команду и вызывает метод. Может ли кто-нибудь помочь мне с моим ботом и дать некоторые пояснения о том, как достичь моих целей? Спасибо!

Комментарии:

1. Вы спрашиваете о том, как заставить бота обнаружить команду?

2. да, я думаю, это был бы лучший вопрос

Ответ №1:

Если ваш код уже работает, то вам действительно просто нужно создать команду:

 from discord.ext import commands

bot = commands.Bot(command_prefix=":")

@bot.command()
async def email(ctx, email, message):
    # use your email code
 

Обратите внимание, что любые пробелы, которые не заключены в кавычки, будут разделять аргументы, поэтому единственный способ правильно использовать эту команду — это то, что вы определили в своем вопросе:

:email johnnyappleseed@gmail.com "hello how are you?"

Более подробную информацию о создании команд можно найти здесь.