#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?"
Более подробную информацию о создании команд можно найти здесь.