我正在尝试制作一个不和谐的机器人,它可以在频道的消息中找到表情符号,然后对这些消息做出反应。
我的密码是:
if message.channel.id == 645647298423613453:
custom_emojis = re.findall(r'<:\w*:\d*>', message.content)
custom_emojis = [e.split('<')[1].replace('>', '') for e in custom_emojis]
for item in custom_emojis:
await message.add_reaction(item)
它与所有自定义表情符号完美反应(我使用了here和here的资源)。所以,现在我必须对普通表情符号实施相同的操作。
第一个问题是如何查找发送的消息中是否有它们。在 this 或 this 之类的线程中,它使用模块
emoji.UNICODE_EMOJI
。然而,正如这里所说,你不能使用它,对吧?
第二个问题是我发现如何与他们反应的唯一方法是this.
我知道
await message.add_reaction("🤩")
完美,但我缺少图标本身。
当我运行这个时:
msg = message.content.split()
print("msg is ", msg)
我得到这个列表:消息是
['🔪', '🏳️\u200d⚧️', 'dasdass', 'aadsdasasd', '<:test2:1066037921007808612>']
,而我最初的不和谐消息是刀图标、Trans 标志、两个随机字符串和一个自定义表情符号。
所以最后一个问题是:我如何获得非自定义表情符号,以及如何以我提取它们的格式与它们做出反应。
作为参考,我的代码托管在 replit.com 中,我使用这个 source 来制作机器人。
所以我实施的解决方案是这样的:
首先我添加自定义表情符号:
custom_emojis = re.findall(r'<:\w*:\d*>', message.content)
custom_emojis = [e.split('<')[1].replace('>', '') for e in custom_emojis]
print(custom_emojis)
print(message.content)
for item in custom_emojis:
await message.add_reaction(item)
然后我添加内置的表情符号:
s=message.content
emoji_reactions = emojis.get(s)
for item in emoji_reactions:
await message.add_reaction(item)
这个实现有一个小问题。您没有按正确的顺序对表情符号做出反应。由于有两个不同的顺序命令。但最后有我想要的所有反应。