discord py如何获取带有jump_url和reactions属性的消息



我正试图使一个机器人,将自动反应,检查在一个频道的消息反应的数量,使一个链接到消息和发送它在一个适度的频道,如果它有2个或更多的反应,然后记录它的跳转url在bot的目录。我找不到一种方法来获取所有的消息与jump_url和反应属性。我感觉超级失落,所以我把代码放在这里

async def on_message(message):
if message.channel.id == 828579458167996420:
channel = client.get_channel(828579458167996420)
if message.attachments or "http" in message.content: 
await message.add_reaction("<:MashaUpset:828589397074116709>")
x = int
messages = await channel.history(limit=21).flatten()
f = open("message log.txt","r")
readfile = f.read()
f.close()
if str(messages.jump_url) not in readfile:
if messages.reactions[0].count >= 2:
x = messages.reactions[0].count - 1
link = messages.jump_url
channel = client.get_channel(892065611876823100)
await channel.send("this post was liked "+ str(x) + " times! "+ str(link))
f = open("message log.txt", "a")
f.write("n" + str(messages.jump_url))
f.close()

我是初学者,很抱歉我弄得一团糟

编辑:不能取jump_url,所以取message.id

我找到了。感谢Dominik的帮助

我所做的改变

  • 我把脚本分成两部分,on_message@tasks.loop
  • 新增for x loop
  • 在循环中添加await channel.fetch_message(x.id)
  • message.id而不是jump_url获取
  • 添加if语句检查消息是否有反应
@client.event
async def on_message(message):
if message.channel.id == 828579458167996420:

if message.attachments or "http" in message.content: 
await message.add_reaction("<:MashaUpset:828589397074116709>")
@tasks.loop(minutes=2)
async def check():
channel = client.get_channel(828579458167996420)
messages = await channel.history(limit=30).flatten()
await asyncio.sleep(3)
f = open("message log.txt","r")
readfile = f.read()
f.close()
for message in messages:
channel = client.get_channel(828579458167996420)
message = await channel.fetch_message(message.id)
if str(message.id) not in readfile:
if message.reactions:
if message.reactions[0].count >= 2:
x = message.reactions[0].count - 1
link = message.jump_url
channel = client.get_channel(892065611876823100)
await channel.send("this post was liked "+ str(x) + " times! "+ str(link))
f = open("message log.txt", "a")
f.write("n" + str(message.id))
f.close()
@check.before_loop
async def before():
await client.wait_until_ready()
check.start()

最新更新