как фильтровать сообщения с символом "+" telebot
У меня есть код который проверяет qiwi токен и вносить его в базу, но он работает только если номер введен без знака +. Как можно установить фильтор, чтоб если сообщение с номером содержит + бот писал, что нужно без плюса. Вот код:
@bot.message_handler(content_types=["text"])
def send_text(message):
chat_id = message.chat.id
if message.chat.id == settings.admin or message.chat.id == settings.admin2:
if message.text == "qiwi":
try:
bot.send_message(message.from_user.id, "? Введите логин(номер без '+') QIWI кошелька")
bot.register_next_step_handler(message, change_qiwi_number)
except requests.exceptions.ConnectionError:
bot.send_message(message.from_user.id, "? Введите логин(номер без '+') QIWI кошелька")
bot.register_next_step_handler(message, change_qiwi_number)
def change_qiwi_number(message):
try:
bot.send_message(message.from_user.id, "? Введите токен QIWI API")
except requests.exceptions.ConnectionError:
bot.send_message(message.from_user.id, "? Введите токен QIWI API")
bot.register_next_step_handler(message, change_qiwi_token)
global qiwi_login
qiwi_login = message.text
def change_qiwi_token(message):
try:
bot.send_message(message.from_user.id, "? Проверка введённых QIWI данных...")
except requests.exceptions.ConnectionError:
bot.send_message(message.from_user.id, "? Проверка введённых QIWI данных...")
time.sleep(2)
try:
request = requests.Session()
request.headers["authorization"] = "Bearer " + message.text
parameters = {"rows": 5, "operation" : "IN"}
selectQiwi = request.get("https://edge.qiwi.com/payment-history/v2/persons/" + qiwi_login + "/payments", params = parameters)
if selectQiwi.status_code == 200:
with sqlite3.connect("base_ts.sqlite", detect_types = sqlite3.PARSE_DECLTYPES | sqlite3.PARSE_COLNAMES) as con:
cur = con.cursor()
cur.execute("SELECT * FROM qiwi")
while True:
row = cur.fetchone()
if row == None:
break
cur.execute("UPDATE qiwi SET login = ?, token = ? WHERE login = ?", (qiwi_login, message.text, row[0]))
if con:
con.close()
try:
bot.delete_message(chat_id = message.chat.id, message_id = message.message_id + 1)
bot.send_message(message.from_user.id, "✅ QIWI токен был успешно изменён")
except requests.exceptions.ConnectionError:
bot.delete_message(chat_id = message.chat.id, message_id = message.message_id + 1)
bot.send_message(message.from_user.id, "✅ QIWI токен был успешно изменён")
else:
try:
bot.delete_message(chat_id = message.chat.id, message_id = message.message_id + 1)
bot.send_message(message.from_user.id, "❌ QIWI токен не прошёл проверку. Код ошибки: " + str(selectQiwi.status_code))
except requests.exceptions.ConnectionError:
bot.delete_message(chat_id = message.chat.id, message_id = message.message_id + 1)
bot.send_message(message.from_user.id, "❌ QIWI токен не прошёл проверку. Код ошибки: " + str(selectQiwi.status_code))
except:
try:
bot.delete_message(chat_id = message.chat.id, message_id = message.message_id + 1)
bot.send_message(message.from_user.id, "❌ QIWI токен не прошёл проверку.\nВведённые вами данные не верны")
except requests.exceptions.ConnectionError:
bot.delete_message(chat_id = message.chat.id, message_id = message.message_id + 1)
bot.send_message(message.from_user.id, "❌ QIWI токен не прошёл проверку.\nВведённые вами данные не верны")
Ответы (2 шт):
Можно удалять в введённом номере "+" с помощью строкового метода lstrip(). По умолчанию без аргументов он возвращает копию строки без пробелов слева, а если в неё передать аргумент в виде символа, то удалит в строке слева указанный в аргументе символ.
qiwi_login = message.text.lstrip("+")
А если всё же с помощью проверки хочешь сделать, то нужно использовать метод startswith, он вернёт True если строка начинается с заданного символа.
qiwi_login = message.text
if qiwi_login.startswith("+"):
bot.send_message(message.from_user.id, "Введите номер без +")
else:
...
Можно реализовать так, чтобы было не важно как пользователь введет номер телефона, с плюсом или без
qiwi_login = message.text
if '+' in qiwi_login:
qiwi_login = message.text.lstrip("+")
bot.send_message(message.from_user.id, qiwi_login)
else:
bot.send_message(message.from_user.id, qiwi_login)