#python #python-3.x #telegram #telegram-bot #aiogram
Вопрос:
Я хочу добавить в бота функцию «изменить права доступа к чату», но не могу понять, как это сделать. Использование библиотеки aiogram с базой данных postgresql (psycopg2)
Python 3.9.5
aiogram==2.14.3
Обработчик обратного вызова (например: вызов.данные = «defaultchat-can_send_media_messages»)
@dp.callback_query_handler(lambda call: "defaultchat" == call.data.split('-')[0])
async def deafultChatCallbacks(call: types.callback_query):
chatLang = pg.getChatLang(call.message.chat.id)
call_data = call.data.split('-')[1]
curSettings = pg.getChatSettings(call.message.chat.id) # :rtype: dict (in db it's json)
curSettings[call_data] = not curSettings[call_data]
# Trying change the type from dict to types.ChatPermissions
curSettings = type('types.ChatPermissions', (type,), (curSettings))
return await call.message.chat.set_permissions(permissions=curSettings)
Дикт (или json в базе данных):
{
'can_send_messages': True,
'can_send_media_messages': True,
'can_send_polls': True,
'can_send_other_messages': True,
'can_add_web_page_previews': True,
'can_change_info': True,
'can_invite_users': True,
'can_pin_messages': True
}
Лог:
ERROR:asyncio:Task exception was never retrieved
future: <Task finished name='Task-10' coro=<Dispatcher._process_polling_updates() done, defined at D:Program FilesPythonlibsite-packagesaiogramdispatcherdispatcher.py:409> exception=BadRequest("Can't parse permissions json object")>
...
aiogram.utils.exceptions.BadRequest: Can't parse permissions json object
Если я удалю строку с изменением класса # curSettings = type('types.ChatPermissions', (type,), (curSettings))
, вот журнал:
ERROR:asyncio:Task exception was never retrieved
future: <Task finished name='Task-10' coro=<Dispatcher._process_polling_updates() done, defined at D:Program FilesPythonlibsite-packagesaiogramdispatcherdispatcher.py:409> exception=BadRequest('Chat_not_modified')>
...
aiogram.utils.exceptions.BadRequest: Chat_not_modified
Комментарии:
1. Я не понимаю, зачем вы
type()
это используете. Что касается меня, то это совершенно неправильная идея. Ошибка показывает, что это необходимоJSON
, тогда, возможно, вам следует использоватьjson.dumps(curSettings)
2. или, может быть, вам следует сделать это
curSettings = ChatPermission(**curSettings)
, как вtelegram-bot
» проблемах: [Добавление/обновление сообщений в чате ]( github.com/python-telegram-bot/python-telegram-bot/issues/1834 )
Ответ №1:
Я не могу это проверить, но, основываясь на telegram-bot
issues
добавлении/обновлении сообщений в чате, вы должны это сделать
curSettings = ChatPermissions(**curSettings)