Данные не сохраняются в базу данных MongoDB

Я хочу сделать выдачу роли с помощью одобрения саппортов на сервере дискорд, вообщем сложная система.. Для этого мне нужно сохранять id сообщения и id автора сообщения, которому нужно выдать роль, весь код работает, ошибка в строке проверки... Но всё равно не понятно, в чём заключается ошибка..

@bot.event
async def on_message(message):
    msg = message.content.lower()
    request = ['роль', 'хочу роль', 'дайте роль', 'нужна роль']

    if msg in request:
        for i in orgs:
            if not message.author.display_name.split(' ')[0].replace('[', '') in orgs:
                await message.channel.send(f'`[ROLES]`: {message.author.mention}, тег организации не найден!')
                break

            if i == message.author.display_name.split(' ')[0].replace('[', ''):
                global msg_db
                msg_db = message
                guild = bot.get_guild(831511376425123882)
                role = discord.utils.get(guild.roles, id=orgs[i])

                await message.channel.send(f'`[ROLES]`: {message.author.mention}, ваш запрос на получение роли был отправлен саппортам!')

                embed = discord.Embed(
                    title='Запрос на получение роли!',
                    description='✅ - выдать роль\n❌ - отклонить запрос\n?️ - изменить никнейм\n? - запросить статистику',
                    color=0x000000
                )
                embed.add_field(name=f'Пользователь:', value=f'{message.author.mention}', inline=False)
                embed.add_field(name=f'Никнейм:', value=f'{message.author.display_name}', inline=False)
                embed.add_field(name=f'Роль для выдачи:', value=f'{role.mention}', inline=False)
                embed.set_thumbnail(url='https://psv4.userapi.com/c537232/u356224017/docs/d1/416eb92aec38/rodina.png?extra=2E9CwKZ0PIjnG8aaNkwehlHwjxlycBfGx-4p20ABm3mPI4jNpdV1OXaUUA9zGA4Q04VM21UezrXsjtqC411Xbh-Ro7rW1L4OGgNxpcQv3lvfOYCb-Irn-_-51AaQa2fpNDZhHm80dvZm1HlR1ZWoDigw')
                embed.set_image(url=message.author.avatar_url)

                msgemb = await bot.get_channel(851413212485779466).send(embed=embed)

                await msgemb.add_reaction('✅')
                await msgemb.add_reaction('❌')
                await msgemb.add_reaction('?️')
                await msgemb.add_reaction('?')

                roles_post = {
                    'm_id':msg_db.id,
                    'user':msg_db.author
                }

                if roles.count_documents({'m_id':msg_db.id}) == 0:
                    roles.insert_one(roles_post)
                else:
                    await message.channel.send(f'`[ROLES]`: {message.author.mention}, вы уже отправили запрос на получение роли!')

Код ошибки:

Ignoring exception in on_message
Traceback (most recent call last):
  File "C:\Users\Хозяин\AppData\Local\Programs\Python\Python39\lib\site-packages\discord\client.py", line 343, in _run_event
    await coro(*args, **kwargs)
  File "C:\Users\Хозяин\Desktop\rodina\main.py", line 78, in on_message
    if roles.count_documents({'m_id':msg_db.id}) == 0:
  File "C:\Users\Хозяин\AppData\Local\Programs\Python\Python39\lib\site-packages\pymongo\collection.py", line 1811, in count_documents
    return self._retryable_non_cursor_read(_cmd, session)
  File "C:\Users\Хозяин\AppData\Local\Programs\Python\Python39\lib\site-packages\pymongo\collection.py", line 1816, in _retryable_non_cursor_read
    with client._tmp_session(session) as s:
  File "C:\Users\Хозяин\AppData\Local\Programs\Python\Python39\lib\contextlib.py", line 117, in __enter__
    return next(self.gen)
  File "C:\Users\Хозяин\AppData\Local\Programs\Python\Python39\lib\site-packages\pymongo\mongo_client.py", line 1676, in _tmp_session
    s = self._ensure_session(session)
  File "C:\Users\Хозяин\AppData\Local\Programs\Python\Python39\lib\site-packages\pymongo\mongo_client.py", line 1663, in _ensure_session
    return self.__start_session(True, causal_consistency=False)
  File "C:\Users\Хозяин\AppData\Local\Programs\Python\Python39\lib\site-packages\pymongo\mongo_client.py", line 1608, in __start_session
    self._topology._check_implicit_session_support()
  File "C:\Users\Хозяин\AppData\Local\Programs\Python\Python39\lib\site-packages\pymongo\topology.py", line 519, in _check_implicit_session_support
    self._check_session_support()
  File "C:\Users\Хозяин\AppData\Local\Programs\Python\Python39\lib\site-packages\pymongo\topology.py", line 535, in _check_session_support
    self._select_servers_loop(
  File "C:\Users\Хозяин\AppData\Local\Programs\Python\Python39\lib\site-packages\pymongo\topology.py", line 227, in _select_servers_loop
    raise ServerSelectionTimeoutError(
pymongo.errors.ServerSelectionTimeoutError: cluster0-shard-00-01.gi8x6.mongodb.net:27017: connection closed,cluster0-shard-00-02.gi8x6.mongodb.net:27017: connection closed,cluster0-shard-00-00.gi8x6.mongodb.net:27017: connection closed, Timeout: 30s, Topology Description: <TopologyDescription id: 62921938169cf516fdb144a3, topology_type: ReplicaSetNoPrimary, servers: [<ServerDescription ('cluster0-shard-00-00.gi8x6.mongodb.net', 27017) server_type: Unknown, rtt: None, error=AutoReconnect('cluster0-shard-00-00.gi8x6.mongodb.net:27017: connection closed')>, <ServerDescription ('cluster0-shard-00-01.gi8x6.mongodb.net', 27017) server_type: Unknown, rtt: None, error=AutoReconnect('cluster0-shard-00-01.gi8x6.mongodb.net:27017: connection closed')>, <ServerDescription ('cluster0-shard-00-02.gi8x6.mongodb.net', 27017) server_type: Unknown, rtt: None, error=AutoReconnect('cluster0-shard-00-02.gi8x6.mongodb.net:27017: connection closed')>]>

Ответы (1 шт):

Автор решения: Andrew

На сколько видно из логов, у вас mongo кластер из 3х нод. Судя по ошибке, кластер находится в состоянии ReplicaSetNoPrimary, т.е. в кластере отсутствует мастер нода. Т.к. драйвер mongo пытается отправить запросы на мастерноду, которая отсутствует в кластере, коннект закрывается.

→ Ссылка