【问题标题】:How check on_message if message has emoji for discord py?如果消息包含不和谐 py 的表情符号,如何检查 on_message?
【发布时间】:2019-07-18 11:36:15
【问题描述】:

我在使用 python 方面相当新,我正在尝试编写一个具有基本功能的不和谐机器人,我希望其中一个是在有人使用前缀后,如果他们发布了机器人回复的表情符号表情符号的网址,但我无法让它工作。我不知道如何使用 on_message 来检查消息是否包含表情符号。有人可以帮我吗?谢谢。

#if message.content[0] == "!" and message.content[1:4] == " <:":
            #print(message.content[4:-1])
            #emoji_name = ""
            #for i in str(message.content[4:-1]):
                #if i != ":":
                    #emoji_name += i
                #if i == ":":
                    #print(emoji_name)
                    #break
            #await client.send_message(message.channel, get(client.get_all_emojis(), name=emoji_name).url)

【问题讨论】:

  • 我编写了这个糟糕的代码,如果正确完成,它可以工作,但如果不正确,则会引发大量错误。看上面的帖子。

标签: discord discord.py


【解决方案1】:

Discord 自定义表情符号的形式为 &lt;:name:id&gt;。因此,如果您使用re,Python 正则表达式库,您可以在给定消息中找到所有自定义表情符号。

import re
import discord

@client.event
async def on_message(msg):
    custom_emojis = re.findall(r'<:\w*:\d*>', msg.content)
    custom_emojis = [int(e.split(':')[1].replace('>', '')) for e in custom_emojis]
    custom_emojis = [discord.utils.get(client.get_all_emojis(), id=e) for e in custom_emojis]
    # From now, `custom_emojis` is `list` of `discord.Emoji` that `msg` contains.

我现在没有测试这个代码,但是我之前用过这个方法,发现它有效。所以如果这不起作用请给我反馈,然后我会发现我是否输入错误。

【讨论】:

  • 感谢您的帮助,我不知道re,但它不起作用。我在第一行收到错误消息:TypeError: expected string or bytes-like object
  • 它也不适用于不是来自服务器的自定义表情符号。
  • 对不起,我没有使用msg.content 代替msg。因为re.findall的第二个参数是str,所以你应该把msg改成msg.content
猜你喜欢
  • 2021-08-11
  • 2021-08-04
  • 2020-11-25
  • 2021-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-28
  • 2021-12-04
相关资源
最近更新 更多