Установите разрешения для чата с помощью telegram-бота

#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)