I have already implemented a lot of telegram bots with Telepot 12.7 and never had a single problem. Now, suddenly, after adding my bot to a group it started spamming this error message:
raise KeyError('No suggested keys %s in %s' % (str(keys), str(d)))
KeyError: "No suggested keys ['message', 'edited_message', 'channel_post', 'edited_channel_post', 'callback_query', 'inline_query', 'chosen_inline_result', 'shipping_query', 'pre_checkout_query'] in {'update_id': 676740400, 'my_chat_member': {'chat': {'id': -500413139, 'title': 'NazTestGroup', 'type': 'group', 'all_members_are_administrators': True}, 'from': {'id': 172579176, 'is_bot': False, 'first_name': 'Nazareno Descanso', 'username': 'Descanso7', 'language_code': 'en'}, 'date': 1616661428, 'old_chat_member': {'user': {'id': 1684936782, 'is_bot': True, 'first_name': 'telegram-reputation', 'username': 'reputationhmci_bot'}, 'status': 'member'}, 'new_chat_member': {'user': {'id': 1684936782, 'is_bot': True, 'first_name': 'telegram-reputation', 'username': 'reputationhmci_bot'}, 'status': 'left'}}}"
The issue seems this one: https://github.com/nickoala/telepot/issues/184
but it is an old issue solved in 2016.
I tried adding ‘new_chat_member’ to the keymap and, with this fix, the bot starts but it is unresponsive, nothing passes to the "handle(msg)" method. It responds if you write to it in a private chat, but not in the group.
Here is the code with which I initialize the bot:
def handle(msg):
global users_manager
content_type, chat_type, chat_id = telepot.glance(msg)
print(content_type, chat_type, chat_id, msg)
try:
userid = get_userid(chat_id, msg)
users_manager.add_user(userid)
if content_type == "text" and msg["text"] == "/start":
bot.sendMessage(chat_id, f"Ciao! Sono reputation_bot, vi darò punti per ogni messaggio scritto "
f"potendo guadagnare così livelli esclusivi!")
else:
users_manager.get_user(userid).add_points(1)
check_if_lucky_message(userid, chat_id, msg)
check_current_level(userid, chat_id, msg)
print(users_manager.get_user(userid))
pickle.dump(users_manager, open("score_dict.pkl", mode="wb"))
except Exception as e:
print(f"Error:: {e}")
def main(argv):
global bot
global users_manager
global levels_manager
print(f"Bot started, token {TOKEN}")
bot = telepot.Bot(TOKEN)
levels_manager = LevelManager()
users_manager = pickle.load(open("score_dict.pkl", mode="rb"))
if os.path.exists("score_dict.pkl") else UsersManager()
print(levels_manager)
print(users_manager)
bot.message_loop(handle, run_forever=True)
if __name__ == "__main__":
main(sys.argv[1:])
2
Answers
I had the same problem when I have added by Bot into a group. To solve it, I have added ‘update_id’ in the list of keys inside _extract_message(update) function of the module ‘loop.py’, line 102.
I ran the bot again and it stops raising the exception. Then I remove my change and now everything works OK.
(I know, it’s an ugly workaround but at least stop the issue)
Faced with the same problem:
)
Environment:
Python 3.7.7
telepot==12.7
Attempts:
Using @Carlog suggestion raised for me the exception:
This is hotfix below for our bots until we have a better solution.
In the file Libsite-packagestelepotloop.py change the function _extract_message.