1

好的,这是我的代码:

@client.command(aliases=['d'], pass_context=True)
async def decrypt(ctx, arg, member=discord.Member):
    key = b'xxxxxx'
    f = Fernet(key)
    decrypted = f.decrypt(arg)
    channel = await member.create_dm()
    await channel.send(f'Decrypted message: {decrypted}')

我在 ctx 之后插入了一个字符串,上面写着 TypeError: token must be bytes。我的参数是这个(这是一个字节,对吗?): b'gAAAAABgx22pwwjUHUA7KqV8jmZrXvocfC3VrHS_QrGCfCaEyj6f7cG1_K3NtbkADYiR4l8fq-DiqYJJk2k8n0jBUhDYsH2kNA=='

4

1 回答 1

0

首先,pass_context被弃用。二、无需使用create_dm;成员是可消息的,所以你可以做member.send. 第三,discord.py 默认将所有参数解释为字符串。您需要使用类型提示(说到它,=用于分配默认值,而不是参数类型)。第四,这将发送Decrypted message: b'meetmeatthepetstore',而不是Decrypted message: meetmeatthepetstore,所以你会想要decode结果。结果如下:

@client.command(aliases=['d'])
async def decrypt(ctx, arg: bytes, member: discord.Member):
    key = b'mycoolkey'
    f = Fernet(key)
    decrypted = f.decrypt(arg).decode('utf_8')
    await member.send(f'Decrypted message: {decrypted}')
于 2021-06-15T20:59:00.533 回答