Reputation: 345
I am adding profile cards onto my Discord bot, but I've come across one issue. When someone types !profile @user
I am not sure how to properly parse for @user so the bot knows which profile card to lookup.
I first parse message.content and then remove the 9 first chars of the message content (which is always !profile
) but the rest of the message content returns the user_id which looks <@289583108183948460>
instead of the user's discrim. I have tried using re.sub to remove the special characters (@, >, and <) like this:
a = str(message.content[9:])
removeSpecialChars = re.sub("[!@#$%^&*()[]{};:,./<>?\|`~-=_+]", " ", a)
print(removeSpecialChars)
But the weird characters are still there when I only want the number so I can search it in the database easily. I'm sure there's a way better way to do this though but I can't figure it out.
Upvotes: 1
Views: 1602
Reputation: 836
discord.py's message objects include a Message.mentions
attribute so you can iterate over a list of Member
. Here are the doc listings for async and rewrite.
With this you can simply iterate over the mentions as so:
for member in ctx.message.mentions:
# do stuff with member
discord.py allows you to grab discord.Member
objects from messages with type hinting. simply add the following to the command
@bot.command()
async def profile(ctx, member: discord.Member=None):
member = member or ctx.message.author
Upvotes: 2