Как получить сообщение от пользователя?
Требуется получить сообщение от пользователя, но убрать команду отправляющую само сообщение.
Чтобы получилось примерно так
Сообщение: /Message Привет!
Вывод: Привет!
Я пытался реализовать эту функцию как-то так..
user_msg = "{0}".format(message.text)
print(user_msg.split("/Message")[1])
Однако из-за того, что в .split нельзя добавить несколько команд приходится делать одинаковую функцию с разными командами в user_msg. Хотя сам вывод получается полностью чистым, то есть без разных скобочек/ковычек. Как я могу получить такой же результат без .split?
Ответы (3 шт):
вы можете воспользоваться регулярными выражениями, чтобы удалять всё после / и до пробела.
import re
re.sub(r'/.* ', '', message.text)
например если message.text = /Message Привет! на выходе получим только Привет!
Еще через описанные выше регулярные выражения можно сделать проще:
import re
msg = re.split(r' ', message.text, maxsplit=1)
msg.pop(0)
В этом коде вы делите сообщение по первому пробелу, т.е если текст сообщения = /Message Привет, бот!
То вы получаете список msg = ['/Message', 'Привет, бот!] и следующим действием msg.pop(0) удаляете msg[0] которое равно /Message, а дальше делаете с новым msg[0] (привет, бот!) что хотите.
P.S. если вы сделаете этим способом, то обьязательно сделайте структуру try/except, иначе при вводе /Message без текста, будет получена ошибка IndexError и бот отключится.
Используйте split, но разделяйте по умолчанию (по пробелам) и указываем что нам нужно одно разделение. Всё выходит в одну строку и работает универсально для любой команды
message.text.split(maxsplit=1)[1]
Следующая сточка вам не нужна user_msg = "{0}".format(message.text). Т. к. message.text уже имеет тип строка, с ней ничего дополнительно делать не нужно.