#python #discord.py
#python #discord.py
Вопрос:
Опубликовано ранее, но я внес некоторые изменения (которые, скорее всего, неверны) Мой скрипт отслеживает любые сообщения, содержащие объявление о продаже, некоторые люди публикуют свою цену в форме «2.1k» (или аналогичную, 1k, 3.5k и т. Д.)
Мой скрипт считывает сообщение, отделяет цену, сохраняет ее как «цена» и отправляет ее во встраивание discord. Проблема, с которой я столкнулся, заключалась в том, что он видел некоторые сообщения и использовал слова с буквой «K» в качестве цены. В одном из примеров в сообщении говорилось
"Buy from Truster seller (60 Refs)
Lifetime - £4100 // $5300 Obo
Renewal -£3500 // $4500 Obo
US Wire/UK Bank Transfer, Transferwise, PayPal, BTC, Stripe, Rev
Discount for cash in UK
И отправленной ценой было слово «Банк»
Я никогда раньше не использовал регулярные выражения, пожалуйста, дайте мне знать, правильно ли я это сделал и что я мог бы сделать, чтобы изменить его.
check1 = False
check2 = True
for x in message.content.lower():
print(x)
if x == "k":
check1 = True
elif x == "$":
check1 = True
elif x == "£":
check1 = True
if check1 and check2: #both success so must be correct
print("Is not a dm and includes a price")
split_message = message.content.split(" ")
messageNoBold = message.content.replace('**','')
price = None
thePrice = re.findall("d (.d )?[kK]", split_message)
for x in thePrice:
if "$" in x:
price = x
elif "£" in x:
price = x
elif "k" in x:
price = x
print(price)
ВОЗВРАТ —
return _compile(pattern, flags).findall(string)
TypeError: expected string or bytes-like object
Ответ №1:
Ваша split_message
переменная представляет собой список, а не строку. Вам нужно будет применить регулярное выражение к каждой строке в списке, например:
for item in split_message:
thePrice = re.findall("d (.d )?[kK]", split_message)
for x in thePrice:
if "$" in x:
price = x
elif "£" in x:
price = x
elif "k" in x:
price = x
Это обрабатывает ошибку, которую вы видите, и должно успешно ее устранить. В этом примере табуляции / пробелы испорчены, поэтому не просто копируйте и вставляйте.