Changed conversation handler to convopyro
This commit is contained in:
parent
82a659cce2
commit
9fb509fc2b
192
bwtbot.py
192
bwtbot.py
@ -5,8 +5,15 @@ from subprocess import call
|
|||||||
from pyrogram import filters
|
from pyrogram import filters
|
||||||
from pyrogram.client import Client
|
from pyrogram.client import Client
|
||||||
from pyrogram.sync import idle
|
from pyrogram.sync import idle
|
||||||
from pyrogram.types import ForceReply, BotCommand, BotCommandScopeChat, Message
|
from pyrogram.types import (
|
||||||
|
ForceReply,
|
||||||
|
BotCommand,
|
||||||
|
BotCommandScopeChat,
|
||||||
|
Message,
|
||||||
|
ReplyKeyboardRemove,
|
||||||
|
)
|
||||||
from pyrogram.enums.chat_action import ChatAction
|
from pyrogram.enums.chat_action import ChatAction
|
||||||
|
from convopyro import Conversation, listen_message
|
||||||
from functions import *
|
from functions import *
|
||||||
from modules.colors import *
|
from modules.colors import *
|
||||||
from modules.bwt import *
|
from modules.bwt import *
|
||||||
@ -22,31 +29,29 @@ app = Client(
|
|||||||
bot_token=config["bot_token"],
|
bot_token=config["bot_token"],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
Conversation(app)
|
||||||
|
|
||||||
|
|
||||||
@app.on_message(
|
@app.on_message(
|
||||||
~filters.scheduled
|
~filters.scheduled
|
||||||
& filters.command(["setcard", "задать карту"], prefixes=["/", ""])
|
& filters.command(["setcard", "задать карту"], prefixes=["/", ""])
|
||||||
)
|
)
|
||||||
async def setcard(_: Client, msg: Message):
|
async def setcard(_: Client, msg: Message):
|
||||||
if userGet(msg.from_user.id, "context") is None:
|
await msg.reply_text(
|
||||||
userSet(msg.from_user.id, "context", "set")
|
string("send_number"),
|
||||||
await msg.reply_text(
|
reply_markup=ForceReply(placeholder=string("enter_number")),
|
||||||
string("send_number"),
|
)
|
||||||
reply_markup=ForceReply(placeholder=string("enter_number")),
|
answer = await listen_message(_, msg.chat.id, timeout=None)
|
||||||
)
|
if answer is None:
|
||||||
else:
|
return
|
||||||
await msg.reply_text(string("cancel_first"))
|
elif answer.text.strip() in ["/cancel", "cancel", "/відміна", "відміна"]:
|
||||||
|
await msg.reply_text(string("cancel"), reply_markup=ReplyKeyboardRemove())
|
||||||
|
return
|
||||||
@app.on_message(
|
userSet(answer.from_user.id, "card", answer.text)
|
||||||
~filters.scheduled & filters.command(["cancel", "відміна"], prefixes=["/", ""])
|
appendLog(f"User {str(msg.from_user.id)} set card id to {answer.text}")
|
||||||
)
|
await msg.reply_text(
|
||||||
async def cancel(_: Client, msg: Message):
|
string("card_linked").format(answer.text), reply_markup=ReplyKeyboardRemove()
|
||||||
if userGet(msg.from_user.id, "context") is not None:
|
)
|
||||||
userReset(msg.from_user.id, "context")
|
|
||||||
await msg.reply_text(string("cancel"))
|
|
||||||
else:
|
|
||||||
await msg.reply_text(string("cancel_none"))
|
|
||||||
|
|
||||||
|
|
||||||
@app.on_message(
|
@app.on_message(
|
||||||
@ -54,69 +59,57 @@ async def cancel(_: Client, msg: Message):
|
|||||||
& filters.command(["resetcard", "забути картку"], prefixes=["/", ""])
|
& filters.command(["resetcard", "забути картку"], prefixes=["/", ""])
|
||||||
)
|
)
|
||||||
async def resetcard(_: Client, msg: Message):
|
async def resetcard(_: Client, msg: Message):
|
||||||
if userGet(msg.from_user.id, "context") is None:
|
if "card" in jsonLoad("data/database.json")[str(msg.from_user.id)]:
|
||||||
if "card" in jsonLoad("data/database.json")[str(msg.from_user.id)]:
|
userReset(msg.from_user.id, "card")
|
||||||
userReset(msg.from_user.id, "card")
|
await msg.reply_text(string("card_unlinked"))
|
||||||
await msg.reply_text(string("card_unlinked"))
|
appendLog(f"User {str(msg.from_user.id)} reseted his card")
|
||||||
appendLog(f"User {str(msg.from_user.id)} reseted his card")
|
|
||||||
else:
|
|
||||||
await msg.reply_text(string("card_not_linked").format(string("get_number")))
|
|
||||||
appendLog(f"User {str(msg.from_user.id)} tried to reset non-existent card")
|
|
||||||
else:
|
else:
|
||||||
await msg.reply_text(string("cancel_first"))
|
await msg.reply_text(string("card_not_linked").format(string("get_number")))
|
||||||
|
appendLog(f"User {str(msg.from_user.id)} tried to reset non-existent card")
|
||||||
|
|
||||||
|
|
||||||
@app.on_message(
|
@app.on_message(
|
||||||
~filters.scheduled & filters.command(["balance", "баланс"], prefixes=["/", ""])
|
~filters.scheduled & filters.command(["balance", "баланс"], prefixes=["/", ""])
|
||||||
)
|
)
|
||||||
async def balance(_: Client, msg: Message):
|
async def balance(_: Client, msg: Message):
|
||||||
if userGet(msg.from_user.id, "context") is None:
|
try:
|
||||||
try:
|
if "card" in jsonLoad("data/database.json")[str(msg.from_user.id)]:
|
||||||
if "card" in jsonLoad("data/database.json")[str(msg.from_user.id)]:
|
await app.send_chat_action(chat_id=msg.chat.id, action=ChatAction.TYPING)
|
||||||
await app.send_chat_action(
|
water_left = await getWaterLeft(
|
||||||
chat_id=msg.chat.id, action=ChatAction.TYPING
|
userGet(msg.from_user.id, "card"), msg.from_user.id, app
|
||||||
)
|
)
|
||||||
water_left = await getWaterLeft(
|
if water_left == "":
|
||||||
userGet(msg.from_user.id, "card"), msg.from_user.id, app
|
|
||||||
)
|
|
||||||
if water_left == "":
|
|
||||||
await msg.reply_text(
|
|
||||||
string("error_new").format(
|
|
||||||
f'https://bwtaqua.com.ua/card-topup/?id={userGet(msg.from_user.id, "card")}'
|
|
||||||
)
|
|
||||||
)
|
|
||||||
# raise EmptyCardException("Card information is empty")
|
|
||||||
elif water_left == "Failure":
|
|
||||||
await msg.reply_text(
|
|
||||||
string("error_occured").format(string("get_number"))
|
|
||||||
)
|
|
||||||
appendLog(
|
|
||||||
f"User {str(msg.from_user.id)} could not get left water amount"
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
await msg.reply_text(string("card_balance").format(water_left))
|
|
||||||
appendLog(
|
|
||||||
f"User {str(msg.from_user.id)} has {water_left} liters remaining"
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
await msg.reply_text(
|
await msg.reply_text(
|
||||||
string("card_not_linked").format(string("get_number"))
|
string("error_new").format(
|
||||||
|
f'https://bwtaqua.com.ua/card-topup/?id={userGet(msg.from_user.id, "card")}'
|
||||||
|
)
|
||||||
)
|
)
|
||||||
appendLog(
|
# raise EmptyCardException("Card information is empty")
|
||||||
f"User {str(msg.from_user.id)} tried to get balance without card set"
|
elif water_left == "Failure":
|
||||||
)
|
|
||||||
except Exception as exp:
|
|
||||||
if msg.from_user.id != config["owner_id"]:
|
|
||||||
await msg.reply_text(
|
await msg.reply_text(
|
||||||
string("error_occured").format(string("get_number"))
|
string("error_occured").format(string("get_number"))
|
||||||
)
|
)
|
||||||
await app.send_message(
|
appendLog(
|
||||||
owner_id,
|
f"User {str(msg.from_user.id)} could not get left water amount"
|
||||||
f"Error occured by {str(msg.from_user.id)}:\nException: `{exp}`\nTraceback: `{format_exc()}`",
|
)
|
||||||
|
else:
|
||||||
|
await msg.reply_text(string("card_balance").format(water_left))
|
||||||
|
appendLog(
|
||||||
|
f"User {str(msg.from_user.id)} has {water_left} liters remaining"
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
await msg.reply_text(string("card_not_linked").format(string("get_number")))
|
||||||
|
appendLog(
|
||||||
|
f"User {str(msg.from_user.id)} tried to get balance without card set"
|
||||||
)
|
)
|
||||||
appendLog(f"User {str(msg.from_user.id)} could not get left water amount")
|
except Exception as exp:
|
||||||
else:
|
if msg.from_user.id != config["owner_id"]:
|
||||||
await msg.reply_text(string("cancel_first"))
|
await msg.reply_text(string("error_occured").format(string("get_number")))
|
||||||
|
await app.send_message(
|
||||||
|
owner_id,
|
||||||
|
f"Error occured by {str(msg.from_user.id)}:\nException: `{exp}`\nTraceback: `{format_exc()}`",
|
||||||
|
)
|
||||||
|
appendLog(f"User {str(msg.from_user.id)} could not get left water amount")
|
||||||
|
|
||||||
|
|
||||||
@app.on_message(
|
@app.on_message(
|
||||||
@ -124,27 +117,20 @@ async def balance(_: Client, msg: Message):
|
|||||||
& filters.command(["topup", "refill", "поповнити"], prefixes=["/", ""])
|
& filters.command(["topup", "refill", "поповнити"], prefixes=["/", ""])
|
||||||
)
|
)
|
||||||
async def topup_cmd(_: Client, msg: Message):
|
async def topup_cmd(_: Client, msg: Message):
|
||||||
if userGet(msg.from_user.id, "context") is None:
|
try:
|
||||||
try:
|
if "card" in jsonLoad("data/database.json")[str(msg.from_user.id)]:
|
||||||
if "card" in jsonLoad("data/database.json")[str(msg.from_user.id)]:
|
await app.send_chat_action(chat_id=msg.chat.id, action=ChatAction.TYPING)
|
||||||
await app.send_chat_action(
|
await msg.reply_text(
|
||||||
chat_id=msg.chat.id, action=ChatAction.TYPING
|
string("top_up").format(str(userGet(msg.from_user.id, "card")))
|
||||||
)
|
)
|
||||||
await msg.reply_text(
|
appendLog(f"User {str(msg.from_user.id)} requested top up")
|
||||||
string("top_up").format(str(userGet(msg.from_user.id, "card")))
|
else:
|
||||||
)
|
await msg.reply_text(string("card_not_linked").format(string("get_number")))
|
||||||
appendLog(f"User {str(msg.from_user.id)} requested top up")
|
appendLog(
|
||||||
else:
|
f"User {str(msg.from_user.id)} tried to request top up without card set"
|
||||||
await msg.reply_text(
|
)
|
||||||
string("card_not_linked").format(string("get_number"))
|
except Exception as exp:
|
||||||
)
|
await msg.reply_text(str(exp))
|
||||||
appendLog(
|
|
||||||
f"User {str(msg.from_user.id)} tried to request top up without card set"
|
|
||||||
)
|
|
||||||
except Exception as exp:
|
|
||||||
await msg.reply_text(str(exp))
|
|
||||||
else:
|
|
||||||
await msg.reply_text(string("cancel_first"))
|
|
||||||
|
|
||||||
|
|
||||||
@app.on_message(
|
@app.on_message(
|
||||||
@ -152,14 +138,11 @@ async def topup_cmd(_: Client, msg: Message):
|
|||||||
& filters.command(["start", "help", "допомога"], prefixes=["/", ""])
|
& filters.command(["start", "help", "допомога"], prefixes=["/", ""])
|
||||||
)
|
)
|
||||||
async def help(_: Client, msg: Message):
|
async def help(_: Client, msg: Message):
|
||||||
if userGet(msg.from_user.id, "context") is None:
|
await msg.reply_text(string("welcome").format(string("get_number")))
|
||||||
await msg.reply_text(string("welcome").format(string("get_number")))
|
if msg.from_user.language_code in jsonLoad("strings.json"):
|
||||||
if msg.from_user.language_code in jsonLoad("strings.json"):
|
userSet(msg.from_user.id, "locale", msg.from_user.language_code)
|
||||||
userSet(msg.from_user.id, "locale", msg.from_user.language_code)
|
|
||||||
else:
|
|
||||||
userSet(msg.from_user.id, "locale", "en")
|
|
||||||
else:
|
else:
|
||||||
await msg.reply_text(string("cancel_first"))
|
userSet(msg.from_user.id, "locale", "en")
|
||||||
|
|
||||||
|
|
||||||
pid = getpid()
|
pid = getpid()
|
||||||
@ -174,15 +157,6 @@ async def kill(_: Client, msg: Message):
|
|||||||
system(f"kill -9 {pid}")
|
system(f"kill -9 {pid}")
|
||||||
|
|
||||||
|
|
||||||
@app.on_message(~filters.scheduled)
|
|
||||||
async def any_message_handler(app, msg):
|
|
||||||
if userGet(msg.from_user.id, "context") == "set":
|
|
||||||
userSet(msg.from_user.id, "card", msg.text)
|
|
||||||
userReset(msg.from_user.id, "context")
|
|
||||||
appendLog(f"User {str(msg.from_user.id)} set card id to {msg.text}")
|
|
||||||
await msg.reply_text(string("card_linked").format(msg.text))
|
|
||||||
|
|
||||||
|
|
||||||
print(f"{nowtime()} {WHITE}Starting with PID {YELLOW}{pid}{RESET}")
|
print(f"{nowtime()} {WHITE}Starting with PID {YELLOW}{pid}{RESET}")
|
||||||
|
|
||||||
app.start() # type: ignore
|
app.start() # type: ignore
|
||||||
@ -195,7 +169,6 @@ app.set_bot_commands(
|
|||||||
BotCommand("topup", "Поповнити картку"),
|
BotCommand("topup", "Поповнити картку"),
|
||||||
BotCommand("setcard", "Прив'язати картку"),
|
BotCommand("setcard", "Прив'язати картку"),
|
||||||
BotCommand("resetcard", "Відв'язати картку"),
|
BotCommand("resetcard", "Відв'язати картку"),
|
||||||
BotCommand("cancel", "Відмінити операцію"),
|
|
||||||
],
|
],
|
||||||
language_code="uk",
|
language_code="uk",
|
||||||
) # type: ignore
|
) # type: ignore
|
||||||
@ -207,7 +180,6 @@ app.set_bot_commands(
|
|||||||
BotCommand("topup", "Поповнити картку"),
|
BotCommand("topup", "Поповнити картку"),
|
||||||
BotCommand("setcard", "Прив'язати картку"),
|
BotCommand("setcard", "Прив'язати картку"),
|
||||||
BotCommand("resetcard", "Відв'язати картку"),
|
BotCommand("resetcard", "Відв'язати картку"),
|
||||||
BotCommand("cancel", "Відмінити операцію"),
|
|
||||||
],
|
],
|
||||||
language_code="ru",
|
language_code="ru",
|
||||||
) # type: ignore
|
) # type: ignore
|
||||||
@ -219,7 +191,6 @@ app.set_bot_commands(
|
|||||||
BotCommand("topup", "Refill card"),
|
BotCommand("topup", "Refill card"),
|
||||||
BotCommand("setcard", "Link card"),
|
BotCommand("setcard", "Link card"),
|
||||||
BotCommand("resetcard", "Unlink card"),
|
BotCommand("resetcard", "Unlink card"),
|
||||||
BotCommand("cancel", "Cancel operation"),
|
|
||||||
]
|
]
|
||||||
) # type: ignore
|
) # type: ignore
|
||||||
|
|
||||||
@ -231,7 +202,6 @@ app.set_bot_commands(
|
|||||||
BotCommand("setcard", "Link card"),
|
BotCommand("setcard", "Link card"),
|
||||||
BotCommand("resetcard", "Unlink card"),
|
BotCommand("resetcard", "Unlink card"),
|
||||||
BotCommand("shutdown", "Turn off the bot"),
|
BotCommand("shutdown", "Turn off the bot"),
|
||||||
BotCommand("cancel", "Cancel operation"),
|
|
||||||
],
|
],
|
||||||
scope=BotCommandScopeChat(chat_id=owner_id),
|
scope=BotCommandScopeChat(chat_id=owner_id),
|
||||||
) # type: ignore
|
) # type: ignore
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
beautifulsoup4~=4.11.2
|
beautifulsoup4~=4.11.2
|
||||||
|
convopyro==0.5
|
||||||
pyrogram~=2.0.102
|
pyrogram~=2.0.102
|
||||||
pathlib~=1.0.1
|
|
||||||
tgcrypto~=1.2.5
|
tgcrypto~=1.2.5
|
||||||
|
pathlib~=1.0.1
|
||||||
ujson~=5.7.0
|
ujson~=5.7.0
|
12
strings.json
12
strings.json
@ -4,16 +4,14 @@
|
|||||||
"get_number": "**Get card number (Var. 1):**\nOn the front bottom side of your card, number may be found\n\n**Get card number (Var. 2):**\n1. Scan QR on the card\n2. Open webpage from code\n3. Numer should be found in **Номер карти \"Здорова Вода\"** or **Номер карти BWT Aqua** fields",
|
"get_number": "**Get card number (Var. 1):**\nOn the front bottom side of your card, number may be found\n\n**Get card number (Var. 2):**\n1. Scan QR on the card\n2. Open webpage from code\n3. Numer should be found in **Номер карти \"Здорова Вода\"** or **Номер карти BWT Aqua** fields",
|
||||||
"card_linked": "Linked card: `{0}`\n\nPlease, make sure the number is correct before using the bot",
|
"card_linked": "Linked card: `{0}`\n\nPlease, make sure the number is correct before using the bot",
|
||||||
"card_unlinked": "Card was unlinked from your Telegram",
|
"card_unlinked": "Card was unlinked from your Telegram",
|
||||||
"card_not_linked": "You don't have any linked card.\n\nВы можете задать её с помощью команды /setcard\n\n{0}",
|
"card_not_linked": "You don't have any linked card.\n\nВYou can set it using /setcard\n\n{0}",
|
||||||
"error_occured": "An error occurred while getting the amount of remaining water on the card.\n\nPlease make sure the linked card number is correct. If you are sure that the bot is broken, please contact @profitroll.\n\nLink your card: /setcard\n\n{0}",
|
"error_occured": "An error occurred while getting the amount of remaining water on the card.\n\nPlease make sure the linked card number is correct. If you are sure that the bot is broken, please contact @profitroll.\n\nLink your card: /setcard\n\n{0}",
|
||||||
"error_new": "An error occurred while getting the amount of remaining water on the card.\n\nLast a few weeks BWT seems to return empty string to balance request from our server. We assume that our server has been blacklisted.\n\nTo check your balance you can use official [BWT App](https://bwtaqua.com.ua/en/#app) or simply bookmark this page: {0}.",
|
"error_new": "An error occurred while getting the amount of remaining water on the card.\n\nLast a few weeks BWT seems to return empty string to balance request from our server. We assume that our server has been blacklisted.\n\nTo check your balance you can use official [BWT App](https://bwtaqua.com.ua/en/#app) or simply bookmark this page: {0}.",
|
||||||
"card_balance": "Card's balance is {0} l. of water",
|
"card_balance": "Card's balance is {0} l. of water",
|
||||||
"top_up": "[Click here to top up](https://bwtaqua.com.ua/card-topup/?id={0})",
|
"top_up": "[Click here to top up](https://bwtaqua.com.ua/card-topup/?id={0})",
|
||||||
"cancel": "Operation cancelled",
|
"cancel": "Operation cancelled",
|
||||||
"cancel_none": "Nothing to cancel",
|
|
||||||
"cancel_first": "Operation ongoing. Cancel the current one using /cancel to run this action",
|
|
||||||
"enter_number": "Enter card number",
|
"enter_number": "Enter card number",
|
||||||
"send_number": "Please, send your card number"
|
"send_number": "Please, send your card number\nIf you want to abort this operation, use /cancel"
|
||||||
},
|
},
|
||||||
"uk": {
|
"uk": {
|
||||||
"welcome": "Привіт-привіт!\n\nЦей бот дозволяє дізнатись скільки літрів залишилось на вашій карточці.\n\n**Команди:**\n • /balance – дізнатись баланс карти\n • /setcard – приав'язати карту\n • /resetcard – відв'язати карту\n\n{0}\n\nРозробник **не має жодного відношення до BWT Aqua**, а бот створений лише для особистого, некомерційного використання.",
|
"welcome": "Привіт-привіт!\n\nЦей бот дозволяє дізнатись скільки літрів залишилось на вашій карточці.\n\n**Команди:**\n • /balance – дізнатись баланс карти\n • /setcard – приав'язати карту\n • /resetcard – відв'язати карту\n\n{0}\n\nРозробник **не має жодного відношення до BWT Aqua**, а бот створений лише для особистого, некомерційного використання.",
|
||||||
@ -25,10 +23,8 @@
|
|||||||
"error_new": "При отриманні води на карточці виникла помилка.\n\nОстанні тижні BWT повертає нашому серверу порожні строки замість балансу. Є підозри, що сервер потрапив у блеклист.\n\nДля перевірки балансу рекомендуємо користуватись офіційним [додатком BWT](https://bwtaqua.com.ua/#app) або просто додати цю сторінку у закладки: {0}.",
|
"error_new": "При отриманні води на карточці виникла помилка.\n\nОстанні тижні BWT повертає нашому серверу порожні строки замість балансу. Є підозри, що сервер потрапив у блеклист.\n\nДля перевірки балансу рекомендуємо користуватись офіційним [додатком BWT](https://bwtaqua.com.ua/#app) або просто додати цю сторінку у закладки: {0}.",
|
||||||
"card_balance": "На карточці {0} л. води",
|
"card_balance": "На карточці {0} л. води",
|
||||||
"top_up": "[Натисніть для поповнення](https://bwtaqua.com.ua/card-topup/?id={0})",
|
"top_up": "[Натисніть для поповнення](https://bwtaqua.com.ua/card-topup/?id={0})",
|
||||||
"cancel": "Операція відмінена",
|
"cancel": "Операцію скасовано",
|
||||||
"cancel_none": "Нема що відміняти",
|
|
||||||
"cancel_first": "Триває інша операція. Відмініть триваючу операцію командою /cancel щоб запустити іншу дію",
|
|
||||||
"enter_number": "Введіть номер картки",
|
"enter_number": "Введіть номер картки",
|
||||||
"send_number": "Будь ласка, надішліть номер вашої картки"
|
"send_number": "Будь ласка, надішліть номер вашої картки\nЯкщо ви хочете скасувати цю операцію, використовуйте /cancel"
|
||||||
}
|
}
|
||||||
}
|
}
|
Reference in New Issue
Block a user