我正在尝试创建一个不和谐的机器人,该机器人将记录已编辑或删除的消息。
出于某种原因,程序有时将作者ID视为字符串。
clear
的代码不能像on_message_edit
的代码一样工作
当我在on_message
时,我提到这样的作者是可行的
on_message
但是当我尝试在UserID = message.author.id
await bot.send_message(whatever channel, 'This is <@%s>' % (UserId))
上执行相同的提及方法时,它没有用。我做了
on_message_edit
我收到此错误
@bot.event
async def on_message_edit(before, after):
MemberId = after.author.id
await bot.send_message(bot.get_channel('480495197034381332'), 'The user <@%s> have edited his message from ``' + before.content + '`` to `` ' + after.content + ' `` ' % (MemberId))
答案 0 :(得分:1)
运算符$letters = array('a', 'b', 'c', 'd');
$hex = array('6100','6200','6300','6400'); //'a', 'b', 'c', 'd'
的优先级高于%
。参见the docs on operator precedence。
因此,执行+
的代码首先会评估a + b % c
。
在您的代码中,这意味着评估的第一件事是b % c
,并且失败,因为' `` ' % (MemberId)
中没有%s
:
' `` '
可以通过在'The user <@%s> have edited his message from ``' + before.content + '`` to `` ' + after.content + ' `` ' % (MemberId)
之前的所有内容周围加上括号来解决此问题,例如:
%
但这仍然是一种很差的方法。
例如,如果bot.send_message(bot.get_channel('480495197034381332'),
('The user <@%s> have edited his message from ``'
+ before.content + '`` to `` ' + after.content + ' `` ')
% (MemberId))
或%
中有before.content
,则失败。如果after.content
是一个元组,它也会失败。
这是正确的:
MemberId
这会更好:
bot.send_message(bot.get_channel('480495197034381332'),
'The user <@%s> have edited his message from ``%s``'
' to ``%s`` ' % (MemberId, before.content, after.content))
答案 1 :(得分:0)
您需要移动function rands(used) {
let r;
do {
r = Math.floor(Math.random() * 20) + 1;
} while (used.indexOf(r) >= 0);
return r;
}
var rand = [];
for (let i = 0; i < 4; i++) rand[i] = rands(rand);
%s
根据您的情况
>>> '12%s' + '45' % '3'
TypeError: not all arguments converted during string formatting
>>> '12%s' % '3' + '45'
'12345'
如果您使用的是Python3.6 +,f字符串会更干净
await bot.send_message(bot.get_channel('480495197034381332'), 'The user <@%s> have edited his message from ``' % MemberId + before.content + '`` to `` ' + after.content + ' `` ')