Как обновить строку Python в цикле for?

#python #string #discord #discord.py

#питон #строка #Discord #discord.py

Вопрос:

Я создаю бота Discord, используя discord.py библиотеку. Библиотека использует это on_message(ctx) событие, чтобы позволить нам изменить сообщение, если мы этого захотим. Что я хотел бы сделать, так это удалить форматирование и заменить упоминания пользователей именами разногласий. Текст сообщения выглядит следующим образом:

 lt;@!34565734654367046435gt; lt;@!34565734645354367046435gt; are you here?  

В ctx переменной я могу получить упоминания как User объекты, ctx.mentions и я могу получить ИМЯ и идентификатор каждого упомянутого пользователя.

Я хотел бы lt;@!34565734654367046435gt; заменить его именем пользователя. В результате получится что-то вроде:

 Name1 Name2 are you here?  

Это то, что у меня есть до сих пор, но, похоже, это не работает.

 remove_formatting = utils.remove_markdown(context.content) print(remove_formatting) # prints the very first code styled line in this question for member in context.mentions:  remove_formatting.replace(f'lt;@!{member.id}gt;', member.name)  

Если я напечатаю member.id и member.name то, не делая ничего другого, я получу ожидаемые значения. Как обновить строку в этом цикле for?

Комментарии:

1. Каков фактический результат, который вы получаете? Вы распечатали remove_formatting , чтобы убедиться, что это то, что вы ожидаете, прежде чем выполнять замену?

2. да, это самая первая строка в стиле кода: lt;@!34565734654367046435gt; lt;@!34565734654367046435gt;lt;@!34565734645354367046435gt; ты здесь?

Ответ №1:

replace Функция возвращает новую строку, она не редактирует существующую строку на месте. Если вы отредактируете свой цикл, чтобы:

 remove_formatting = utils.remove_markdown(context.content) for member in context.mentions:  remove_formatting = remove_formatting.replace(f'lt;@!{member.id}gt;', member.name)  

это должно сработать.

Комментарии:

1. да, это сработало. это почти идентично PHP 🙂 спасибо

2. да, нужно некоторое время, пока я не смогу