【问题标题】:Not sure how to convert string to usable discord data不确定如何将字符串转换为可用的不和谐数据
【发布时间】:2023-03-21 13:54:01
【问题描述】:

我正在尝试为我的不和谐机器人创建一个系统,以将有关消息的数据存储在文本文件中。为此,消息信息变成一个字符串。问题是当我尝试使用这些数据时出现错误。例如,当我尝试执行 message.remove_reaction 时,我收到以下错误消息:

File "main.py", line 195, in on_raw_reaction_add
    await message.remove_reaction("✅", payload.member)
AttributeError: 'str' object has no attribute 'remove_reaction'

我正在将文本文件转换为列表并将其转换回变量。例如,消息 = 文件数据 [5]。这是从文本文件中提取数据的代码。

for x in fileNames:
    f = open(x, "r+")
    messageid = f.readline()
    #creates list if message id match is found
    if (int(messageid) == int(payload.message_id)):
      p = open(x, "r+")
      global file_name
      file_name = p
      for x in p:
        file = x.rstrip('\n')
        file_data.append(file)
      break
  print(file_data)
  #assigning variables from list
  messageid = file_data[0]
  in_embed = file_data[2]
  game_actual = file_data[3]
  goal_actual = file_data[4]
  message = file_data[5]
  names = []
  #stores member information onto seperate list
  for x in range(6,len(file_data)):
    names.append(x)

将它们转化为变量之前的列表:

['814375931497021490', '811857283771662340', "<Message id=814375932051456000 channel=<TextChannel id=811857283771662340 name='general' position=0 nsfw=False news=False category_id=811857283771662338> type=<MessageType.default: 0> author=<Member id=810761971979911188 name='CockGobbler' discriminator='2337' bot=True nick=None guild=<Guild id=811857283771662337 name='Bot Test 2' shard_id=None chunked=False member_count=2>> flags=<MessageFlags value=0>>", 'game2', '2', "<Message id=814375931497021490 channel=<TextChannel id=811857283771662340 name='general' position=0 nsfw=False news=False category_id=811857283771662338> type=<MessageType.default: 0> author=<Member id=810761971979911188 name='CockGobbler' discriminator='2337' bot=True nick=None guild=<Guild id=811857283771662337 name='Bot Test 2' shard_id=None chunked=False member_count=2>> flags=<MessageFlags value=0>>"]

【问题讨论】:

    标签: python discord discord.py


    【解决方案1】:

    您的代码没有显示您如何将 Message 转换为字符串或您尝试使用它做什么,但通常我建议您不要将其转换为字符串。

    更好的方法是保存Message.content,它已经是消息真实内容的字符串,以防您想要访问该内容。或者你可以保存Message.id,当你需要让你的Message对象使用如下函数时:

    await message.remove_reaction
    

    您要做的只是检索Message 对象(或在本例中为PartialMessage):

    my_message = get_partial_message(message_ID)
    await my_message.remove_reaction("✅", payload.member)
    

    【讨论】:

      【解决方案2】:

      您正在将所有内容存储和读取为字符串,而实际上它们应该被读取为discord.py 定义的特定类。您有几个选项可以解决您的问题。

      1. Pickle

      定义一个可腌制的类。创建一个具有与您想从消息中获取的任何数据一致的属性的类。然后你可以dump那个对象,意思是把它变成一个文件,然后load它,意思是把它变成可用的python代码。

      1. 手动将您的 file_data 转换为正确的对象

      查看Message 文档和Message source code,并在尝试使用它们之前检查消息的每个部分需要的类型。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-04-25
        • 2021-05-18
        • 2021-04-23
        • 2019-08-06
        • 2020-12-27
        • 2023-03-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多