使用机器人发送不和谐消息时记录其 ID

时间:2021-02-10 18:40:42

标签: python discord.py

我有一个程序可以在 Discord 服务器上发送消息。我想添加一个方法来获取刚刚发送的消息,所以我可以打印它的message_id

console.log("Generate a 32 byte long AES key with PBKDF2");
var crypto = require('crypto');

var password = "secret password";
var PBKDF2_ITERATIONS = 15000; // number of iterations, higher is better but slower

// ### security warning - never use a fixed salt in production, this is for compare reasons only
var salt = generateFixedSalt32Byte();
// please use below generateSalt32Byte()
//var salt = generateSalt32Byte();

var aesKeySha256 = generateAes256KeyPbkdf2Sha256(password, PBKDF2_ITERATIONS, salt);  
console.log('aesKeySha256 length: ',
  aesKeySha256.length, ' data: ', bytesToHex(aesKeySha256));
var aesKeySha1 = generateAes256KeyPbkdf2Sha1(password, PBKDF2_ITERATIONS, salt);  
console.log('aesKeySha1   length: ',
  aesKeySha1.length, ' data: ', bytesToHex(aesKeySha1));

var aesKeySha1Base64 = generateAes256KeyPbkdf2Sha1Base64(password, PBKDF2_ITERATIONS, salt);  
console.log('aesKeySha1   Base64: ', aesKeySha1Base64);

function generateAes256KeyPbkdf2Sha256(password, iterations, salt) {
  return crypto.pbkdf2Sync(password, salt, iterations, 32, 'sha256');
}

function generateAes256KeyPbkdf2Sha1(password, iterations, salt) {
  return crypto.pbkdf2Sync(password, salt, iterations, 32, 'sha1');
}

function generateAes256KeyPbkdf2Sha1Base64(password, iterations, salt) {
  return crypto.pbkdf2Sync(password, salt, iterations, 32, 'sha1').toString('base64');
}

function generateSalt32Byte() {
  return crypto.randomBytes(32);
}

function generateFixedSalt32Byte() {
  return Buffer.from('0000000000000000000000000000000000000000000000000000000000000000', 'hex');
}

function bytesToHex(input) {
  return input.toString('hex');
}

我们可以使用 fetch 命令来做到这一点,但这似乎不雅。直觉上,似乎应该有一种方法可以从发送函数中获取诸如 method_id 之类的详细信息,但我在 documentation

中找不到类似的内容

1 个答案:

答案 0 :(得分:0)

Messageable.send 返回一个 discord.Message 实例,您可以使用 id 属性获取它的 ID。

这里也不需要 asyncio.gather 函数,我只是使用普通的 for 循环并将 ID 附加到列表中

@bot.command(name='repeat', help='help me to understand bots')
async def repeat(ctx, *lines):
    message_ids = []

    for line in lines:
        m = await ctx.send(line)
        message_ids.append(m.id)

    print(message_ids)

如果你真的想坚持使用asyncio.gather

@bot.command(name='repeat', help='help me to understand bots')
async def repeat(ctx, *lines):
    message_ids = []

    async def send_line(line):
        m = await ctx.send(line)
        message_ids.append(m.id) 

    await asyncio.gather(*[send_line(line) for line in lines])
    print(message_ids)

参考: