繁体   English   中英

不确定如何将字符串转换为可用的 discord 数据

[英]Not sure how to convert string to usable discord data

我正在尝试为我的 discord 机器人创建一个系统,以将有关消息的数据存储在文本文件中。 为此,消息信息变成一个字符串。 问题是当我尝试使用这些数据时出现错误。 例如,当我尝试执行 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>>"]

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

更好的方法是保存Message.content ,它已经是消息的真实内容的字符串,以防您想要访问内容。 或者您可以保存Message.id并且当您需要获取Message object 以使用 function 时,例如:

await message.remove_reaction

您要做的只是检索Message object(或本例中的PartialMessage ):

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

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

  1. 泡菜

定义一个可腌制的 class。 制作一个 class ,其属性与您想从消息中获取的任何数据一致。 然后,您可以dump该 object,这意味着将其转换为文件,然后load它,这意味着将其转换回可用的 python 代码。

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

Go 通过消息文档和消息源代码,在尝试使用它们之前检查消息的每个部分需要什么样的类型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM