#python #discord #discord.py
#python #Discord #discord.py
Вопрос:
Я пытаюсь создать систему для моего бота 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'
Я конвертирую текстовый файл в список и преобразую его обратно в переменную. Например, message = file_data[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>>"]
Ответ №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
. У вас есть несколько вариантов решения вашей проблемы.
Определите выбираемый класс. Создайте класс с атрибутами, которые соответствуют тем данным, которые вы хотите получить из сообщения. Затем вы можете dump
этот объект, то есть превратить его в файл, а затем load
в него, то есть превратить его обратно в пригодный для использования код python.
- Вручную превратите ваши
file_data
в правильные объекты
Просмотрите документацию к сообщению и исходный код сообщения и проверьте, какого типа должна быть каждая часть сообщения, прежде чем пытаться их использовать.