#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. да, нужно некоторое время, пока я не смогу