问题
I'm wondering how to get a message by its message id. I have tried discord.fetch_message(id)
and discord.get_message(id)
, but both raise:
Command raised an exception: AttributeError: module 'discord' has no attribute 'fetch_message'/'get_message'
回答1:
When getting a message, you're going to need an abc.Messageable
object - essentially an object where you can send a message in, for example a text channel, a DM etc.
Example:
@bot.command()
async def getmsg(ctx, msgID: int): # yes, you can do msg: discord.Message
# but for the purposes of this, i'm using an int
msg = await ctx.fetch_message(msgID) # you now have the message object from the id
# ctx.fetch_message gets it from the channel
# the command was executed in
###################################################
@bot.command()
async def getmsg(ctx, channel: discord.TextChannel, member: discord.Member):
msg = discord.utils.get(await channel.history(limit=100).flatten(), author=member)
# this gets the most recent message from a specified member in the past 100 messages
# in a certain text channel - just an idea of how to use its versatility
References:
- abc.Messageable
- TextChannel.history()
- TextChannel.fetch_message()
- Context.fetch_message()
来源:https://stackoverflow.com/questions/61851174/how-to-get-message-by-id-discord-py