Использование дополнительных маркеров форматирования в python

#python

Вопрос:

У меня есть discord.py бот, который отправляет сообщение, когда кто-то вступает в гильдию. В нем есть пользовательское сообщение, которое задается администратором с помощью команды. Администратору необходимо указать {пользователь} и {правила}, чтобы упомянуть канал пользователя и правил в этом сообщении. Я пытаюсь сделать так, чтобы им не нужно было вводить правила, или пользователя, или что-то еще.

 # Sends welcome message
welcome = cluster.find_one({'id': 'settings'})
welcome_channel = client.get_channel(welcome['welcome_channel'])
welcome_message = welcome['join_message']
rules_channel = client.get_channel(welcome['rules_channel'])
await welcome_channel.send(welcome_message.format(user=member.mention, rules=rules_channel.mention))
 

Оставьте сообщение. Я получаю сообщение об ошибке в любое время, когда администратор устанавливает сообщение примерно так

«привет {пользователь}», где нет правил.

Могу ли я как-нибудь сделать так, чтобы форматы были необязательными?

Ответ №1:

Не с форматом. Формат ожидает, что все значения будут использованы при форматировании сообщения.

Если вы хотите немного изменить формат приветственного сообщения, вы можете использовать шаблонные строки:

 from string import Template

welcome_message = Template(welcome['join_message'])
await welcome_channel.send(welcome_message.safe_substitute(user=member.mention, rules=rules_channel.mention))
 

Для этого требуется Python 3.2 или выше, и переменные сообщения должны быть $var или ${var} . Так что в вашем случае сообщение было бы Welcome $user, here are the $rules или что-то подобное.