данные не сохраняются в базу данных pymongoDB
Пытаюсь cдeлaть каналы привата, используя базу данных MongoDB, весь функционал вроде работает, до момента когда надо сохранять данные в бд. В консоли жалуется на строку t_channel = bot.get_channel(private.find_one({'_id': member.id})['text_id']), понятно, что оно не может получить данные из бд, но я не могу понять почему они не сохраняются, ошибки наводящей на это нет.
Полную ошибку из консоли приложил ниже как и ивент on_voice_state_update, оставив комментарий возле строки, на которую жалуется консоль и строк с бд.
import pymongo
cluster = pymongo.MongoClient("mongodb+srv://Corrygan:[email protected]/")
db = cluster['PrivateDB']
private = db['PrivateCollection']
@bot.event
async def on_voice_state_update(member, before, after):
if after.channel is not None:
if after.channel.id == 1200091472138084402: #id создания привата
guild = bot.get_guild(1105205137837916170) #id сервера
category = discord.utils.get(guild.categories, name='Private')
v_channel = await guild.create_voice_channel(name=f'Приват ({member.display_name})', category=category)
t_channel = await guild.create_text_channel(name=f'Выдача прав ({member.display_name})', category=category)
embed = discord.Embed(
title='',
description='Вы успешно создали свой приватный канал!\nЧтобы дать возможность заходить к вам используйте команду `+perm <user>`\nЧтобы забрать права используйте команду `+unperm <user>`',
color=0x000000
)
await t_channel.send(embed=embed)
await v_channel.set_permissions(member, view_channel=True, connect=True, speak=True, stream=True, kick_members=True, mute_members=True, priority_speaker=True)
await t_channel.set_permissions(member, view_channel=True)
role = discord.utils.get(guild.roles, id=1105205137837916170)
await v_channel.set_permissions(role, view_channel=False)
await t_channel.set_permissions(role, view_channel=False)
await member.move_to(v_channel)
private_post = {
'_id': member.id,
'text_id':t_channel.id,
'voice_id':v_channel.id,
}
if not private.count_documents({'_id':member.id}) == 1:
private.insert_one(private_post)
else:
private.delete_one({'_id':member.id})
if before.channel:
t_channel = bot.get_channel(private.find_one({'_id': member.id})['text_id']) --сюда жалуется
v_channel = bot.get_channel(private.find_one({'_id': member.id})['voice_id'])
[2024-02-03 17:29:30] [ERROR ] discord.client: Ignoring exception in on_voice_state_update Traceback (most recent call last): File "C:\Users\Хозяин\AppData\Local\Programs\Python\Python312\Lib\site-packages\discord\client.py", line 441, in _run_event await coro(*args, **kwargs) File "D:\bot\main.py", line 66, in on_voice_state_update t_channel = bot.get_channel(private.find_one({'_id': member.id})['text_id']) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\Хозяин\AppData\Local\Programs\Python\Python312\Lib\site-packages\pymongo\collection.py", line 1506, in find_one for result in cursor.limit(-1): File "C:\Users\Хозяин\AppData\Local\Programs\Python\Python312\Lib\site-packages\pymongo\cursor.py", line 1264, in next if len(self.__data) or self._refresh(): ^^^^^^^^^^^^^^^ File "C:\Users\Хозяин\AppData\Local\Programs\Python\Python312\Lib\site-packages\pymongo\cursor.py", line 1155, in _refresh self.__session = self.__collection.database.client._ensure_session() ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\Хозяин\AppData\Local\Programs\Python\Python312\Lib\site-packages\pymongo\mongo_client.py", line 1823, in _ensure_session return self.__start_session(True, causal_consistency=False) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\Хозяин\AppData\Local\Programs\Python\Python312\Lib\site-packages\pymongo\mongo_client.py", line 1766, in __start_session self._topology._check_implicit_session_support() File "C:\Users\Хозяин\AppData\Local\Programs\Python\Python312\Lib\site-packages\pymongo\topology.py", line 573, in _check_implicit_session_support self._check_session_support() File "C:\Users\Хозяин\AppData\Local\Programs\Python\Python312\Lib\site-packages\pymongo\topology.py", line 589, in _check_session_support self._select_servers_loop( File "C:\Users\Хозяин\AppData\Local\Programs\Python\Python312\Lib\site-packages\pymongo\topology.py", line 259, in _select_servers_loop raise ServerSelectionTimeoutError( pymongo.errors.ServerSelectionTimeoutError: SSL handshake failed: ac-cgv7lf9-shard-00-00.qagkthv.mongodb.net:27017: [SSL: TLSV1_ALERT_INTERNAL_ERROR] tlsv1 alert internal error (_ssl.c:1000) (configured timeouts: socketTimeoutMS: 20000.0ms, connectTimeoutMS: 20000.0ms),SSL handshake failed: ac-cgv7lf9-shard-00-01.qagkthv.mongodb.net:27017: [SSL: TLSV1_ALERT_INTERNAL_ERROR] tlsv1 alert internal error (_ssl.c:1000) (configured timeouts: socketTimeoutMS: 20000.0ms, connectTimeoutMS: 20000.0ms),SSL handshake failed: ac-cgv7lf9-shard-00-02.qagkthv.mongodb.net:27017: [SSL: TLSV1_ALERT_INTERNAL_ERROR] tlsv1 alert internal error (_ssl.c:1000) (configured timeouts: socketTimeoutMS: 20000.0ms, connectTimeoutMS: 20000.0ms), Timeout: 30s, Topology Description: <TopologyDescription id: 65be4da40ff039f27428b7b6, topology_type: ReplicaSetNoPrimary, servers: [<ServerDescription ('ac-cgv7lf9-shard-00-00.qagkthv.mongodb.net', 27017) server_type: Unknown, rtt: None, error=AutoReconnect('SSL handshake failed: ac-cgv7lf9-shard-00-00.qagkthv.mongodb.net:27017: [SSL: TLSV1_ALERT_INTERNAL_ERROR] tlsv1 alert internal error (_ssl.c:1000) (configured timeouts: socketTimeoutMS: 20000.0ms, connectTimeoutMS: 20000.0ms)')>, <ServerDescription ('ac-cgv7lf9-shard-00-01.qagkthv.mongodb.net', 27017) server_type: Unknown, rtt: None, error=AutoReconnect('SSL handshake failed: ac-cgv7lf9-shard-00-01.qagkthv.mongodb.net:27017: [SSL: TLSV1_ALERT_INTERNAL_ERROR] tlsv1 alert internal error (_ssl.c:1000) (configured timeouts: socketTimeoutMS: 20000.0ms, connectTimeoutMS: 20000.0ms)')>, <ServerDescription ('ac-cgv7lf9-shard-00-02.qagkthv.mongodb.net', 27017) server_type: Unknown, rtt: None, error=AutoReconnect('SSL handshake failed: ac-cgv7lf9-shard-00-02.qagkthv.mongodb.net:27017: [SSL: TLSV1_ALERT_INTERNAL_ERROR] tlsv1 alert internal error (_ssl.c:1000) (configured timeouts: socketTimeoutMS: 20000.0ms, connectTimeoutMS: 20000.0ms)')>]>
Ответы (1 шт):
Удается ли подключиться к этой БД через mongo-express клиента? Если через другого клиента подключиться удается, стоит попробовать явно указать, что надо использовать TLC сертификат, как советовали в сообщении выше:
import certifi
ca = certifi.where()
client = pymongo.MongoClient("mongodb+srv://username:[email protected]/xyzdb?retryWrites=true&w=majority",
tlsCAFile=ca)
Если подключение и через mongo-express не удается, то стоит проверить конфигурацию самой БД.