मैं अपने कलह बॉट के लिए एक एन्क्रिप्ट और डिक्रिप्ट कमांड बनाने की कोशिश कर रहा हूं, हालांकि संदेश डिक्रिप्ट नहीं लगता है


import discord
from discord.ext import commands
from cryptography.fernet import Fernet
from collections.abc import Sequence

def make_sequence(seq):
    if seq is None:
        return ()
    if isinstance(seq, Sequence) and not isinstance(seq, str):
        return seq
    else:
        return (seq,)

def message_check(channel=None, author=None, content=None, ignore_bot=True, lower=True):
    channel = make_sequence(channel)
    author = make_sequence(author)
    content = make_sequence(content)
    if lower:
        content = tuple(c.lower() for c in content)
    def check(message):
        if ignore_bot and message.author.bot:
            return False
        if channel and message.channel not in channel:
            return False
        if author and message.author not in author:
            return False
        actual_content = message.content.lower() if lower else message.content
        if content and actual_content not in content:
            return False
        return True
    return check

@bot.command()
async def encrypt(ctx):
    user = ctx.author
    await user.send("Please enter the message to decrypt.")
    response = await bot.wait_for('message', check=message_check(channel=ctx.author.dm_channel))
    message = response.content
    encoded = message.encode()
    key = Fernet.generate_key()
    f = Fernet(key)
    encrypted = f.encrypt(encoded)
    await ctx.author.send("This is your encrypted message:")
    await ctx.author.send(encrypted)
    await ctx.author.send("This is the key to decrypt the message:")
    await ctx.author.send(key)


@bot.command()
async def decrypt(ctx):
    user = ctx.author
    await user.send("Please enter the encrypted message.")
    response = await bot.wait_for('message', check=message_check(channel=ctx.author.dm_channel))
    encrypted = response.content
    await user.send("Please enter the decryption key:")
    response = await bot.wait_for('message', check=message_check(channel=ctx.author.dm_channel))
    key = response.content
    f = Fernet(key)
    decrypted = f.decrypt(encrypted)
    decoded = decrypted.decode()
    await user.send(decoded)
    print(decoded)

मैंने यह जांचने की कोशिश की कि क्या संदेश अंत में print(decoded) के साथ डिक्रिप्ट भी हो जाता है, लेकिन यह कुछ भी प्रिंट नहीं करता है। मैंने यह भी जांचा कि क्या अन्य सभी चर प्रिंट () के साथ काम करते हैं, और डिकोड को छोड़कर सभी काम करते हैं।

0
J.B. 10 सितंबर 2019, 14:47

1 उत्तर

सबसे बढ़िया उत्तर

यह आपके संदेशों को एन्कोडिंग और डिकोड करने के तरीके से संबंधित है। decrypt का उपयोग करते समय आपको संदेश और कुंजी को एन्कोड करने की आवश्यकता होती है, और आप वैकल्पिक रूप से संदेश और कुंजी को encrypt का उपयोग करते समय इसे सामान्य स्ट्रिंग के रूप में रखने के लिए डीकोड कर सकते हैं, न कि b'...' को भेजते समय उपयोगकर्ता।

नीचे दिया गया संशोधन काम करता है, लेकिन ध्यान दें कि चूंकि message_check ज्ञात नहीं है, मैंने उन क्षेत्रों पर टिप्पणी की जहां इसका उपयोग किया जाता है।

@bot.command()
async def encrypt(ctx):
    user = ctx.author
    await user.send("Please enter the message to decrypt.")
    response = await bot.wait_for('message') # , check=message_check(channel=ctx.author.dm_channel))
    message = response.content
    encoded = message.encode()
    key = Fernet.generate_key()
    f = Fernet(key)
    encrypted = f.encrypt(encoded)
    await ctx.author.send("This is your encrypted message:")
    await ctx.author.send(encrypted.decode())
    await ctx.author.send("This is the key to decrypt the message:")
    await ctx.author.send(key.decode())


@bot.command()
async def decrypt(ctx):
    user = ctx.author
    await user.send("Please enter the encrypted message.")
    response = await bot.wait_for('message') # , check=message_check(channel=ctx.author.dm_channel))
    encrypted = response.content.encode()
    await user.send("Please enter the decryption key:")
    response = await bot.wait_for('message') # , check=message_check(channel=ctx.author.dm_channel))
    key = response.content.encode()
    f = Fernet(key)
    decrypted = f.decrypt(encrypted)
    decoded = decrypted.decode()
    await user.send(decoded)
    print(decoded)
1
Benjin 10 सितंबर 2019, 13:41