【问题标题】:How can I convert a string with the emoji name into a discord emoji?如何将带有表情符号名称的字符串转换为不和谐的表情符号?
【发布时间】:2020-12-27 22:54:33
【问题描述】:

假设我有一个带有表情符号名称的字符串,例如emoji = 'fishing_pole_and_fish'

有没有办法做到msg.add_reaction(emoji) 而不会出现错误:

discord.ext.commands.errors.CommandInvokeError:命令引发了 异常:HTTPException:400 错误请求(错误代码:10014):未知 表情符号

或者我可以将字符串转换为discord.Emoji吗?

我知道我可以使用'\N{FISHING POLE AND FISH}',但我需要它作为'fishing_pole_and_fish',所以我可以用它做其他事情。另外,鱼竿和鱼只是表情符号的一个例子

【问题讨论】:

  • 作为替代方案,您可以为表情符号使用 unicode 字符吗?所以对于:fishing_pole_and_fish: 这将是????。还是您特别需要文字?
  • 我想我会改变我的整个设置......我真的希望你可以为 add_reaction() 使用表情符号名称
  • 不知何故使用这些 un​​icode 字符会完全破坏 IDLE
  • def string_to_emoji(string): return r"\N{%s}"%string 不行吗?
  • 这只是创建字符串"\\N{FISHING POLE AND FISH}" 而不是实际的表情符号。

标签: python python-3.x discord.py


【解决方案1】:

你看过emoji module吗?

为了让机器人能够对内置表情符号做出反应,它需要表情符号是符号“?”,而不是“:fishing_pole:”,这仅适用于自定义表情符号<:name:id>

import emoji

string = ":fishing_pole:"
demoji = emoji.demojize("? ")   # This takes the emoji and gives--> :fishing_pole:
emoji = emoji.emojize(string)    # This takes :fishing_pole: and gives--> ?    
print(demoji)
print(emoji)

它确实需要在两边都有“:”,否则它将无法工作。但如果需要,您可以使用''.join(":"+string+":") 添加

【讨论】:

  • 这可能是一个“Discord 很奇怪”的问题,但这个模块与 Discord 的做法不符。它根本不处理单个区域指示器表情符号,而是将配对指示器的代码查找为标志(“us”返回“:United_States:”),而其他表情符号的名称不正确(来自 Discord 的 POV):“:a :" 最终得到名称 ":A_button_(blood_type):"。其他表情符号似乎相当准确,例如表情符号和手势,尽管即使是这些表情符号也可能有细微的错误名称(“thumbsup”变成“thumbs_up”)。请注意,我正在使用 demojize 进行所有这些测试。
  • @Elusivehawk 我已经对其进行了一些测试,标志变得很奇怪,但是可以通过使用别名来使用区域指示符。 emoji.demojize(text, use_aliases=True) 它给了regional_indicator_a 而不是regional_indicator_symbol_letter_a。我还没有测试过所有的表情符号,但似乎别名的效果稍微好一点
  • 我想我找到了问题所在。似乎该模块只为“主”表情符号表中定义的表情符号制作正则表达式。因此,在区域指标的情况下,它们仅在别名表中定义。最终结果:它看到了一个区域指标,尝试为它创建一个模式,但做不到,然后通过它。我需要进一步研究代码以将其转化为拉取请求,但这个错误让我很困扰,我愿意尝试修复它。
【解决方案2】:

对于公会中的自定义表情符号,您可以使用它。请记住,您必须在公会中拥有表情符号。

emoji = discord.utils.get(ctx.guild.emojis, name="CUSTOM EMOJI NAME")

另一种选择是使用bot.get_emoji 获取表情符号的ID,您可以使用它来跨公会自定义表情符号

【讨论】:

    【解决方案3】:

    你可以使用unicodedata.lookup函数:

    from unicodedata import lookup
    
    def emoji_from_name(name):
        return lookup(name.replace("_", " "))
    

    【讨论】:

    • 当我在某些表情符号上使用它时,它不起作用,例如对于 :thinking: KeyError: "undefined character name 'thinking'"
    • 那是因为那个角色的名字是thinking face。 Discord 使用了一些非标准名称。你从哪里得到字符串?
    • 噢噢噢。我自己定义字符串,所以我可以重新格式化它们以用于其他目的
    猜你喜欢
    • 1970-01-01
    • 2021-10-04
    • 2018-08-28
    • 2016-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-20
    相关资源
    最近更新 更多