diff --git a/api/index.py b/api/index.py index 6bd09be..164a019 100644 --- a/api/index.py +++ b/api/index.py @@ -15,12 +15,15 @@ BUTTON_OK = os.environ.get('BUTTON_OK') or 'Ok' BUTTON_NO = os.environ.get('BUTTON_NO') or 'No' newcomers = {} +app.config.REGISTERED = False -@app.route('/', methods=["GET", "PUT", "OPTIONS"]) +@app.route('/', methods=["GET"]) async def register(req): - r = register_webhook(WEBHOOK) - print('\n\t\t\tWEBHOOK REGISTERED\n') + if not app.config.REGISTERED: + r = register_webhook(WEBHOOK) + print(f'\n\t\t\tWEBHOOK REGISTERED:\n{r.json()}') + app.config.REGISTERED = True return json(r.json()) @@ -29,52 +32,73 @@ async def handle(req): print(req) try: update = req.json - # print(update) + print(update) msg = update.get('message', update.get('my_chat_member')) - if str(msg['chat']['id']) == CHAT_ID: - print(f'message in chat') - if 'new_chat_member' in msg: - chat_id = str(msg['chat']['id']) - member_id = str(msg['new_chat_member']['id']) - print(f'new member {member_id}') - newcomers[member_id] = 'newcomer' - reply_markup = { - "inline_keyboard": [ - [ - {"text": BUTTON_NO, "callback_data": BUTTON_NO}, - {"text": BUTTON_OK, "callback_data": BUTTON_OK} + if msg: + if str(msg['chat']['id']) == CHAT_ID: + print(f'message in chat') + if 'new_chat_member' in msg: + chat_id = str(msg['chat']['id']) + member_id = str(msg['new_chat_member']['id']) + print(f'new member {member_id}') + reply_markup = { + "inline_keyboard": [ + [ + {"text": BUTTON_NO, "callback_data": BUTTON_NO}, + {"text": BUTTON_OK, "callback_data": BUTTON_OK} + ] ] - ] - } - welcome_msg_id = send_message( - chat_id, - WELCOME_MSG, - reply_to=msg['message_id'], - reply_markup=reply_markup - ) - newcomers[member_id] = 'newcomer' + welcome_msg_id - elif 'text' in msg: - chat_id = str(msg['chat']['id']) - member_id = str(msg['from']['id']) - if member_id in newcomers: - if newcomers[member_id].startswith('newcomer'): - answer = msg['text'] - if BUTTON_OK.lower() in answer.lower(): - del newcomers[member_id] - else: - delete_message(msg['message_id']) + } + r = send_message( + chat_id, + WELCOME_MSG, + reply_to=msg['message_id'], + reply_markup=reply_markup + ) + welcome_msg_id = r.json()['result']['message_id'] + print(f'welcome message id: {welcome_msg_id}') + newcomers[member_id] = f'newcomer{welcome_msg_id}' + elif 'text' in msg: + chat_id = str(msg['chat']['id']) + member_id = str(msg['from']['id']) + if member_id in newcomers: + print(f'new member speak {msg["text"]}') + if newcomers[member_id].startswith('newcomer'): + print('watched newcomer') + answer = msg['text'] + if BUTTON_OK.lower() in answer.lower(): + print('found answer') + print('deleting welcome msg') + r = delete_message(CHAT_ID, newcomers[member_id].replace('newcomer', '')) + print(r.json()) + newcomers[member_id] = None + else: + print('deleting some message') + r = delete_message(CHAT_ID, msg['message_id']) + print(r.json()) + else: + print(f'old member speak {msg["text"]}') + print(newcomers) # debug only if 'callback_query' in update: - print(f'callback_query') callback_query = update['callback_query'] chat_id = str(callback_query['message']['chat']['id']) if chat_id == CHAT_ID: + print(f'callback_query in {CHAT_ID}') member_id = str(callback_query['from']['id']) callback_data = callback_query['data'] if callback_data == BUTTON_NO: - ban_member(member_id, CHAT_ID) + print('deleting welcome msg') + r = delete_message(CHAT_ID, newcomers[member_id].replace('newcomer', '')) + print(r.json()) + newcomers[member_id] = None + print('wrong answer') + r = ban_member(CHAT_ID, member_id) + print(r.json()) elif callback_data == BUTTON_OK: - del newcomers[member_id] - delete_message(CHAT_ID, newcomers[member_id].replace('newcomer', '')) + print('proper answer') + r = delete_message(CHAT_ID, newcomers[member_id].replace('newcomer', '')) + print(r.json()) + newcomers[member_id] = None except Exception: pass return text('ok') diff --git a/tgbot/rest.py b/tgbot/rest.py index 33989f2..93fecf8 100644 --- a/tgbot/rest.py +++ b/tgbot/rest.py @@ -7,15 +7,16 @@ apiBase = f"https://api.telegram.org/bot{TOKEN}/" def register_webhook(url): - return requests.get( + r = requests.get( apiBase + f'setWebhook?url={url}' ) + return r -def delete_message(cid, mid): - return requests.post( - apiBase + f"deleteMessage?chat_id={cid}&message_id={mid}" - ) +def delete_message(cid: str, mid: str): + url = apiBase + f"deleteMessage?chat_id={cid}&message_id={mid}" + r = requests.post(url) + return r def send_message(cid, body, reply_to=None, reply_markup=None):