[deps]: Migrate from pymongo to motor

This commit is contained in:
Sweetbread 2023-05-16 16:34:50 +03:00
parent bf3a56c2ef
commit cada18c9f9
7 changed files with 97 additions and 89 deletions

View File

@ -4,7 +4,6 @@ verify_ssl = true
name = "pypi" name = "pypi"
[packages] [packages]
pymongo = "*"
loguru = "*" loguru = "*"
"nekos.py" = "*" "nekos.py" = "*"
levenshtein = "*" levenshtein = "*"
@ -19,6 +18,7 @@ simpledemotivators = {file = "https://github.com/Infqq/simpledemotivators/archiv
"discord.py" = {extras = ["voice"], version = "*"} "discord.py" = {extras = ["voice"], version = "*"}
pillow = {file = "https://github.com/python-pillow/Pillow/archive/refs/tags/9.5.0.zip"} pillow = {file = "https://github.com/python-pillow/Pillow/archive/refs/tags/9.5.0.zip"}
pretty-errors = "*" pretty-errors = "*"
motor = "*"
[dev-packages] [dev-packages]

12
Pipfile.lock generated
View File

@ -1,7 +1,7 @@
{ {
"_meta": { "_meta": {
"hash": { "hash": {
"sha256": "5fd31ea1728c2767b040091ff943f0048057d157b4d1b66507560fec546b4fff" "sha256": "3fc195e7fba50262dd6fb8d84b4e94ffef0409cadd3af064a540ac135621cd79"
}, },
"pipfile-spec": 6, "pipfile-spec": 6,
"requires": { "requires": {
@ -863,6 +863,14 @@
"index": "pypi", "index": "pypi",
"version": "==1.2.10" "version": "==1.2.10"
}, },
"motor": {
"hashes": [
"sha256:4bfc65230853ad61af447088527c1197f91c20ee957cfaea3144226907335716",
"sha256:80c08477c09e70db4f85c99d484f2bafa095772f1d29b3ccb253270f9041da9a"
],
"index": "pypi",
"version": "==3.1.2"
},
"multidict": { "multidict": {
"hashes": [ "hashes": [
"sha256:01a3a55bd90018c9c080fbb0b9f4891db37d148a0a18722b42f94694f8b6d4c9", "sha256:01a3a55bd90018c9c080fbb0b9f4891db37d148a0a18722b42f94694f8b6d4c9",
@ -1139,7 +1147,7 @@
"sha256:fd7bb378d82b88387dc10227cfd964f6273eb083e05299e9b97cbe075da12d11", "sha256:fd7bb378d82b88387dc10227cfd964f6273eb083e05299e9b97cbe075da12d11",
"sha256:ffcc8394123ea8d43fff8e5d000095fe7741ce3f8988366c5c919c4f5eb179d3" "sha256:ffcc8394123ea8d43fff8e5d000095fe7741ce3f8988366c5c919c4f5eb179d3"
], ],
"index": "pypi", "markers": "python_version >= '3.7'",
"version": "==4.3.3" "version": "==4.3.3"
}, },
"pynacl": { "pynacl": {

17
bot.py
View File

@ -16,7 +16,7 @@ from discord import app_commands
from random import randint, shuffle, choice, seed from random import randint, shuffle, choice, seed
from time import time from time import time
from inspect import _empty from inspect import _empty
from pymongo import MongoClient import motor.motor_asyncio
from loguru import logger from loguru import logger
from discord.ext.commands import HybridCommand from discord.ext.commands import HybridCommand
@ -37,7 +37,7 @@ TOKEN = getenv('NATSUKO_TOKEN')
my_id = 710089471835504672 my_id = 710089471835504672
db = MongoClient('localhost', 27017).Koteika db = motor.motor_asyncio.AsyncIOMotorClient('localhost', 27017).Koteika
if os.path.exists('prefixes.json'): if os.path.exists('prefixes.json'):
with open('prefixes.json', 'r') as f: with open('prefixes.json', 'r') as f:
@ -86,11 +86,10 @@ def insert_returns(body):
def region_to_str(_): return "RU" # TODO: Заменить на нормальный код -_- def region_to_str(_): return "RU" # TODO: Заменить на нормальный код -_-
def add_user_to_DB(member): async def add_user_to_DB(member):
# if member is not discord.Member: return # if member is not discord.Member: return
ids = [i["id"] for i in db.members.find()] if not await db.members.find_one({"id": member.id}):
if member.id not in ids: await db.members.insert_one({"id": member.id,
db.members.insert_one({"id": member.id,
"name": member.name, "name": member.name,
"access_level": "gray", "access_level": "gray",
"language": region_to_str("Meow"), # TODO: Ну, очевидно "language": region_to_str("Meow"), # TODO: Ну, очевидно
@ -145,7 +144,7 @@ async def on_ready():
logger.info(f"Загрузка {cog}...") logger.info(f"Загрузка {cog}...")
await bot.load_extension(f'cogs.{cog.replace(".py", "")}') await bot.load_extension(f'cogs.{cog.replace(".py", "")}')
db.members.update_one({"id": 459823895256498186}, {"$set": {"access_level": "secret"}}) await db.members.update_one({"id": 459823895256498186}, {"$set": {"access_level": "secret"}})
if os.path.isfile('reboot'): if os.path.isfile('reboot'):
with open('reboot', 'r') as f: with open('reboot', 'r') as f:
@ -181,7 +180,7 @@ async def on_message_handler(message):
# Обработка команд (пре-подготовка) # Обработка команд (пре-подготовка)
if user.name != 'Котейка': if user.name != 'Котейка':
add_user_to_DB(user) await add_user_to_DB(user)
@bot.event @bot.event
@ -250,7 +249,7 @@ async def change_level(ctx, user: typing.Union[discord.Member, int], level):
if not level in ('secret', 'white', 'gray', 'black'): if not level in ('secret', 'white', 'gray', 'black'):
await ctx.message.add_reaction(XX) await ctx.message.add_reaction(XX)
raise TypeError raise TypeError
db.members.update_one({"id": id_}, {"$set": {"access_level": level}}) await db.members.update_one({"id": id_}, {"$set": {"access_level": level}})
await ctx.message.add_reaction(check_mark) await ctx.message.add_reaction(check_mark)
await asyncio.sleep(3) await asyncio.sleep(3)

View File

@ -7,6 +7,7 @@ from datetime import datetime, timedelta, timezone
from matplotlib import pyplot as plt from matplotlib import pyplot as plt
from matplotlib import ticker, markers from matplotlib import ticker, markers
from loguru import logger from loguru import logger
from asyncio import run_coroutine_threadsafe
class ActiveCount(commands.Cog): class ActiveCount(commands.Cog):
@ -18,11 +19,11 @@ class ActiveCount(commands.Cog):
self.daysoftheweek = ("monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday") self.daysoftheweek = ("monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday")
for server in bot.guilds: for server in bot.guilds:
self.add_server(server.id) run_coroutine_threadsafe(self.add_server(server.id), self.bot.loop)
def add_server(self, server_id: int): async def add_server(self, server_id: int):
if not db.history.find_one({"type": "server", "id": server_id}): if not (await db.history.find_one({"type": "server", "id": server_id})):
db.history.insert_one({ await db.history.insert_one({
"type": "server", "type": "server",
"id": server_id, "id": server_id,
"history": { "history": {
@ -66,7 +67,7 @@ class ActiveCount(commands.Cog):
day = datetime.now().weekday() day = datetime.now().weekday()
fig, ax = plt.subplots(figsize=(8, 5)) fig, ax = plt.subplots(figsize=(8, 5))
server_data = db.history.find_one({"type": "server", "id": inter.guild_id}) server_data = await db.history.find_one({"type": "server", "id": inter.guild_id})
if server_data is None: if server_data is None:
await inter.response.send_message("Недостаточно данных! Попробуйте завтра") await inter.response.send_message("Недостаточно данных! Попробуйте завтра")

View File

@ -52,8 +52,8 @@ class Economic(commands.Cog, name="Экономика"):
@commands.Cog.listener() @commands.Cog.listener()
async def on_message(self, message): async def on_message(self, message):
if not message.author.bot and message.guild is not None and not message.content.startswith(tuple(await self.bot.command_prefix(self.bot, message))): if not message.author.bot and message.guild is not None and not message.content.startswith(tuple(await self.bot.command_prefix(self.bot, message))):
data = db.members.find_one({"id": message.author.id}) data = await db.members.find_one({"id": message.author.id})
flood_channels = db.guild_settings.find_one({"id": message.guild.id}) flood_channels = await db.guild_settings.find_one({"id": message.guild.id})
if flood_channels is None: if flood_channels is None:
flood_channels = [] flood_channels = []
else: else:
@ -62,7 +62,7 @@ class Economic(commands.Cog, name="Экономика"):
if time() - 3 >= data["last_mess_time"] and message.channel.id not in flood_channels: if time() - 3 >= data["last_mess_time"] and message.channel.id not in flood_channels:
delta_exp = len(message.content) + len(message.attachments)*100 delta_exp = len(message.content) + len(message.attachments)*100
db.history.update_one( await db.history.update_one(
{'type': 'server', 'id': message.guild.id}, {'type': 'server', 'id': message.guild.id},
{'$inc': {f'current.{datetime.now().hour}': delta_exp}} {'$inc': {f'current.{datetime.now().hour}': delta_exp}}
) )
@ -72,23 +72,23 @@ class Economic(commands.Cog, name="Экономика"):
delta_money = rint(1, 5) delta_money = rint(1, 5)
# Глобальные опыт/уроень # Глобальные опыт/уроень
db.members.update_one({"id": message.author.id}, await db.members.update_one({"id": message.author.id},
{"$inc": {"exp": delta_exp}}) # Изменяем exp {"$inc": {"exp": delta_exp}}) # Изменяем exp
data = db.members.find_one({"id": message.author.id}) data = await db.members.find_one({"id": message.author.id})
if data is not None: if data is not None:
level = data["level"] level = data["level"]
if level ** 2 * 50 + 5 <= data["exp"]: if level ** 2 * 50 + 5 <= data["exp"]:
db.members.update_one({"id": message.author.id}, await db.members.update_one({"id": message.author.id},
{"$inc": {"level": 1}}) # Изменяем level {"$inc": {"level": 1}}) # Изменяем level
if data["level"]+1 >= data["max_level"]: if data["level"]+1 >= data["max_level"]:
db.members.update_one({"id": message.author.id}, await db.members.update_one({"id": message.author.id},
{"$inc": {"money": (level + 1) * delta_money}}) # Изменяем money {"$inc": {"money": (level + 1) * delta_money}}) # Изменяем money
# Локальные опыт/уровень # Локальные опыт/уровень
prefix = f"guild_stat.{message.guild.id}" prefix = f"guild_stat.{message.guild.id}"
if str(message.guild.id) not in db.members.find_one({"id": message.author.id})["guild_stat"].keys(): if (await db.members.find_one({"id": message.author.id, f'guild_stat.{message.guild.id}': {'$exists': 0}})):
db.members.update_many({"id": message.author.id}, await db.members.update_many({"id": message.author.id},
{"$set": { {"$set": {
f"{prefix}.exp": 0, f"{prefix}.exp": 0,
f"{prefix}.level": 0, f"{prefix}.level": 0,
@ -101,15 +101,15 @@ class Economic(commands.Cog, name="Экономика"):
} }
}}) # Создаем в guild_stat поле для сервера }}) # Создаем в guild_stat поле для сервера
data = db.members.find_one({"id": message.author.id})["guild_stat"][str(message.guild.id)] data = (await db.members.find_one({"id": message.author.id}))["guild_stat"][str(message.guild.id)]
db.members.update_one({"id": message.author.id}, await db.members.update_one({"id": message.author.id},
{"$inc": {f"{prefix}.exp": delta_exp}}) {"$inc": {f"{prefix}.exp": delta_exp}})
data = db.members.find_one({"id": message.author.id})["guild_stat"][str(message.guild.id)] data = (await db.members.find_one({"id": message.author.id}))["guild_stat"][str(message.guild.id)]
level = data["level"] level = data["level"]
if level ** 2 * 50 + 5 <= data["exp"]: if level ** 2 * 50 + 5 <= data["exp"]:
db.members.update_one({"id": message.author.id}, await db.members.update_one({"id": message.author.id},
{"$inc": {f"{prefix}.level": 1}}) {"$inc": {f"{prefix}.level": 1}})
data = db.guild_settings.find_one({"id": message.guild.id}) data = await db.guild_settings.find_one({"id": message.guild.id})
if data is not None and data['levelup'] == "send": if data is not None and data['levelup'] == "send":
await message.reply( await message.reply(
embed=discord.Embed( embed=discord.Embed(
@ -120,7 +120,7 @@ class Economic(commands.Cog, name="Экономика"):
mention_author=False mention_author=False
) )
db.members.update_one({"id": message.author.id}, {"$set": {"last_mess_time": time()}}) await db.members.update_one({"id": message.author.id}, {"$set": {"last_mess_time": time()}})
@commands.Cog.listener() @commands.Cog.listener()
@ -142,9 +142,9 @@ class Economic(commands.Cog, name="Экономика"):
else: else:
humans = list(filter(lambda x: not x.bot, before.channel.members)) humans = list(filter(lambda x: not x.bot, before.channel.members))
if len(humans) == 1: if len(humans) == 1:
self.voice_register(humans[0], before) await self.voice_register(humans[0], before)
if len(humans) != 0: if len(humans) != 0:
self.voice_register(member, before) await self.voice_register(member, before)
# При выходе # При выходе
if after.channel is None: if after.channel is None:
@ -152,7 +152,7 @@ class Economic(commands.Cog, name="Экономика"):
except: pass except: pass
def voice_register(self, member, voice_state): async def voice_register(self, member, voice_state):
if member.id in self.bot.voice_counter.keys(): if member.id in self.bot.voice_counter.keys():
secs = (datetime.now() - self.bot.voice_counter[member.id]).seconds secs = (datetime.now() - self.bot.voice_counter[member.id]).seconds
else: else:
@ -171,7 +171,7 @@ class Economic(commands.Cog, name="Экономика"):
k *= 2 k *= 2
exp = int(secs // 5 * k) exp = int(secs // 5 * k)
money = exp * rint(1, 5) money = exp * rint(1, 5)
db.members.update_one({"id": member.id}, { await db.members.update_one({"id": member.id}, {
"$inc": { "$inc": {
f"guild_stat.{member.guild.id}.secs_in_voice": secs, f"guild_stat.{member.guild.id}.secs_in_voice": secs,
f"guild_stat.{member.guild.id}.exp": exp, f"guild_stat.{member.guild.id}.exp": exp,
@ -179,7 +179,7 @@ class Economic(commands.Cog, name="Экономика"):
"money": money "money": money
}}) }})
db.history.update_one( await db.history.update_one(
{'type': 'server', 'id': member.guild.id}, {'type': 'server', 'id': member.guild.id},
{"$inc": {f'current.{datetime.now().hour}': exp}} {"$inc": {f'current.{datetime.now().hour}': exp}}
) )
@ -196,7 +196,7 @@ class Economic(commands.Cog, name="Экономика"):
@commands.Cog.listener() @commands.Cog.listener()
async def on_member_join(self, member): async def on_member_join(self, member):
member_data = db.members.find_one({"id": member.id}) member_data = await db.members.find_one({"id": member.id})
if member_data is None: if member_data is None:
logger.warning("Пользователь не найден") logger.warning("Пользователь не найден")
@ -204,30 +204,30 @@ class Economic(commands.Cog, name="Экономика"):
if str(member.guild.id) in member_data["guild_stat"].keys(): if str(member.guild.id) in member_data["guild_stat"].keys():
logger.debug(member_data["guild_stat"][str(member.guild.id)]["exp"], end="\t") logger.debug(member_data["guild_stat"][str(member.guild.id)]["exp"], end="\t")
db.members.update_one( await db.members.update_one(
{"id": member.id}, {"id": member.id},
{"$inc": {"exp": member_data["guild_stat"][str(member.guild.id)]["exp"]}} {"$inc": {"exp": member_data["guild_stat"][str(member.guild.id)]["exp"]}}
) )
@commands.Cog.listener() @commands.Cog.listener()
async def on_member_remove(self, member): async def on_member_remove(self, member):
member_data = db.members.find_one({"id": member.id}) member_data = await db.members.find_one({"id": member.id})
if member_data is None: if member_data is None:
logger.warning("Пользователь не найден") logger.warning("Пользователь не найден")
return return
if str(member.guild.id) in member_data["guild_stat"].keys(): if str(member.guild.id) in member_data["guild_stat"].keys():
logger.debug(member_data["guild_stat"][str(member.guild.id)]["exp"], end="\t") logger.debug(member_data["guild_stat"][str(member.guild.id)]["exp"], end="\t")
db.members.update_one( await db.members.update_one(
{"id": member.id}, {"id": member.id},
{"$dec": {"exp": member_data["guild_stat"][str(member.guild.id)]["exp"]} {"$dec": {"exp": member_data["guild_stat"][str(member.guild.id)]["exp"]}
}) })
@commands.Cog.listener() @commands.Cog.listener()
async def on_guild_join(self, guild): async def on_guild_join(self, guild):
for m in db.members.find({f"guild_stat.{guild.id}": {"$exists": True}}): async for m in db.members.find({f"guild_stat.{guild.id}": {"$exists": True}}):
logger.debug(m["guild_stat"][str(guild.id)]["exp"], end="\t") logger.debug(m["guild_stat"][str(guild.id)]["exp"], end="\t")
db.members.update_one( await db.members.update_one(
{"id": m['id']}, {"id": m['id']},
{"$inc": {"exp": m["guild_stat"][str(guild.id)]["exp"]} {"$inc": {"exp": m["guild_stat"][str(guild.id)]["exp"]}
}) })
@ -235,9 +235,9 @@ class Economic(commands.Cog, name="Экономика"):
@commands.Cog.listener() @commands.Cog.listener()
async def on_guild_remove(self, guild): async def on_guild_remove(self, guild):
for m in db.members.find({f"guild_stat.{guild.id}": {"$exists": True}}): async for m in db.members.find({f"guild_stat.{guild.id}": {"$exists": True}}):
logger.debug(m["guild_stat"][str(guild.id)]["exp"], end="\t") logger.debug(m["guild_stat"][str(guild.id)]["exp"], end="\t")
db.members.update_one( await db.members.update_one(
{"id": m['id']}, {"id": m['id']},
{"$dec": {"exp": m["guild_stat"][str(guild.id)]["exp"]} {"$dec": {"exp": m["guild_stat"][str(guild.id)]["exp"]}
}) })
@ -251,7 +251,7 @@ class Economic(commands.Cog, name="Экономика"):
await inter.response.send_message(await get_text(inter, "rank", "Bot hasn't experience")) await inter.response.send_message(await get_text(inter, "rank", "Bot hasn't experience"))
return return
user_data = db.members.find_one({"id": user.id}) user_data = await db.members.find_one({"id": user.id})
if user_data is None or str(inter.guild.id) not in user_data['guild_stat'].keys(): if user_data is None or str(inter.guild.id) not in user_data['guild_stat'].keys():
await inter.response.send_message("Об этом пользователе информации пока нет") await inter.response.send_message("Об этом пользователе информации пока нет")
return return
@ -259,7 +259,7 @@ class Economic(commands.Cog, name="Экономика"):
if str(user.id) in self.bot.voice_counter.keys(): if str(user.id) in self.bot.voice_counter.keys():
prefix = f"guild_stat.{inter.guild.id}" prefix = f"guild_stat.{inter.guild.id}"
if str(inter.guild.id) not in user_data["guild_stat"].keys(): if str(inter.guild.id) not in user_data["guild_stat"].keys():
db.members.update_many( await db.members.update_many(
{"id": user.id}, {"id": user.id},
{"$set": { {"$set": {
f"{prefix}.exp": 0, f"{prefix}.exp": 0,
@ -272,9 +272,9 @@ class Economic(commands.Cog, name="Экономика"):
}} }}
) # Создаем в guild_stat поле для сервера ) # Создаем в guild_stat поле для сервера
self.voice_register(user, user.voice) await self.voice_register(user, user.voice)
user_data = db.members.find_one({"id": user.id}) user_data = await db.members.find_one({"id": user.id})
if user_data is None: return if user_data is None: return
if inter.guild is not None: if inter.guild is not None:
@ -353,7 +353,7 @@ class Economic(commands.Cog, name="Экономика"):
color = discord.Color(0xaaffaa) color = discord.Color(0xaaffaa)
e = discord.Embed(title="Топ", description=category, color=color) e = discord.Embed(title="Топ", description=category, color=color)
data_ = list(db.members.find({f"guild_stat.{inter.guild.id}": {"$exists": True}}).sort(categories[category], -1))[:10] data_ = await db.members.find({f"guild_stat.{inter.guild.id}": {"$exists": True}}).sort(categories[category], -1).to_list(10)
if not data_: if not data_:
await inter.response.send_message(await get_text(inter, "top", "Not enough data. Try later")) await inter.response.send_message(await get_text(inter, "top", "Not enough data. Try later"))
@ -374,7 +374,7 @@ class Economic(commands.Cog, name="Экономика"):
for place in range(l): for place in range(l):
m = data_[place] m = data_[place]
if 'level' not in m['guild_stat'][str(inter.guild.id)].keys(): if 'level' not in m['guild_stat'][str(inter.guild.id)].keys():
db.members.update_one( await db.members.update_one(
{'id': m['id']}, {'id': m['id']},
{'$set': {f'guild_stat.{inter.guild.id}.level': 0}} {'$set': {f'guild_stat.{inter.guild.id}.level': 0}}
) )
@ -426,10 +426,10 @@ class Economic(commands.Cog, name="Экономика"):
db_ = db.members db_ = db.members
info1 = db_.find_one({"id": user1})['guild_stat'][str(inter.guild.id)]['history']['hour'] info1 = await db_.find_one({"id": user1})['guild_stat'][str(inter.guild.id)]['history']['hour']
info2 = db_.find_one({"id": user2})['guild_stat'][str(inter.guild.id)]['history']['hour'] info2 = await db_.find_one({"id": user2})['guild_stat'][str(inter.guild.id)]['history']['hour']
info1[str(int(ts))] = db_.find_one({"id": user1})['guild_stat'][str(inter.guild.id)]['exp'] info1[str(int(ts))] = await db_.find_one({"id": user1})['guild_stat'][str(inter.guild.id)]['exp']
info2[str(int(ts))] = db_.find_one({"id": user2})['guild_stat'][str(inter.guild.id)]['exp'] info2[str(int(ts))] = await db_.find_one({"id": user2})['guild_stat'][str(inter.guild.id)]['exp']
if period == -1: if period == -1:
@ -491,7 +491,7 @@ class Economic(commands.Cog, name="Экономика"):
ts = datetime.now().timestamp() ts = datetime.now().timestamp()
db_mem = db.members db_mem = db.members
data = list(db_mem.find({f"guild_stat.{inter.guild.id}": {"$exists": True}}).sort(f"guild_stat.{inter.guild.id}.exp", -1))[:10] data = await db_mem.find({f"guild_stat.{inter.guild.id}": {"$exists": True}}).sort(f"guild_stat.{inter.guild.id}.exp", -1).to_list(10)
if not data: if not data:
await inter.response.send_message("Недостаточно данных. Попробуйте завтра") await inter.response.send_message("Недостаточно данных. Попробуйте завтра")

View File

@ -17,22 +17,22 @@ class privateChannels(commands.Cog, name="Приватные комнаты"):
@commands.Cog.listener() @commands.Cog.listener()
async def on_voice_state_update(self, member, before, after): async def on_voice_state_update(self, member, before, after):
for chan in [i["id"] for i in db.private_channels.find()]: if (
if not self.bot.get_channel(chan): before.channel and
db.private_channels.delete_one({"id": chan}) (await db.private_channels.find_one({'id': before.channel.id})) and
not self.bot.get_channel(before.channel.id)
v_channels = [i["id"] for i in db.private_channels.find()] ):
v_categories = [self.bot.get_channel(i).category_id for i in v_channels] await db.private_channels.delete_one({'id': before.channel.id})
if ( if (
before.channel is not None and before.channel and
len(before.channel.members) == 0 and len(before.channel.members) == 0 and
before.channel.id not in v_channels and not (await db.private_channels.find_one({'id': before.channel.id})) and
before.channel.category_id in v_categories (await db.private_channels.find_one({'category_id': before.channel.category_id}))
): ):
await before.channel.delete() await before.channel.delete()
if after.channel is not None and after.channel.id in v_channels: if after.channel and (await db.private_channels.find_one({"id": after.channel.id})):
#, overwrites={ #, overwrites={
# member: discord.PermissionOverwrite(manage_channels=True, # member: discord.PermissionOverwrite(manage_channels=True,
# move_members=True, # move_members=True,
@ -66,11 +66,11 @@ class privateChannels(commands.Cog, name="Приватные комнаты"):
"находитесь в главный") "находитесь в главный")
@commands.check(is_white) @commands.check(is_white)
async def set_private(self, ctx): async def set_private(self, ctx):
if ctx.author.voice.channel.id in [i["id"] for i in db.private_channels.find()]: if (await db.private_channels.find({'id': ctx.author.voice.channel.id})):
await ctx.message.delete() await ctx.message.delete()
message = await ctx.send('Канал уже добавлен') message = await ctx.send('Канал уже добавлен')
else: else:
db.private_channels.insert_one({"id": ctx.author.voice.channel.id}) await db.private_channels.insert_one({"id": ctx.author.voice.channel.id, 'category_id': ctx.author.voice.category.id})
await ctx.message.add_reaction(check_mark) await ctx.message.add_reaction(check_mark)
message = ctx.message message = ctx.message
@ -91,8 +91,8 @@ class privateChannels(commands.Cog, name="Приватные комнаты"):
message = await ctx.send("Зайдите в ГК") message = await ctx.send("Зайдите в ГК")
await self.bot.wait_for("voice_state_update", check=lambda member, _, after: \ await self.bot.wait_for("voice_state_update", check=lambda member, _, after: \
member == ctx.message.author and after.channel is not None) member == ctx.message.author and after.channel is not None)
if ctx.author.voice.channel.id in [i["id"] for i in db.private_channels.find()]: if (await db.private_channels.find_one({'id': ctx.author.voice.channel.id})):
db.private_channels.delete_one({"id": ctx.author.voice.channel.id}) await db.private_channels.delete_one({"id": ctx.author.voice.channel.id})
await ctx.message.add_reaction(check_mark) await ctx.message.add_reaction(check_mark)
else: else:
await message.edit(content='Этот канал не является приватным') await message.edit(content='Этот канал не является приватным')

View File

@ -6,10 +6,10 @@ from loguru import logger
daysoftheweek = ("monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday") daysoftheweek = ("monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday")
def save_activity(): async def save_activity():
day = (datetime.now()-timedelta(1)).weekday() day = (datetime.now()-timedelta(1)).weekday()
for data in db.history.find({"type": "server"}): async for data in db.history.find({"type": "server"}):
db.history.update_one( await db.history.update_one(
{"type": "server", "id": data['id']}, {"type": "server", "id": data['id']},
{ {
"$push": "$push":
@ -18,7 +18,7 @@ def save_activity():
{f'yesterday.{i}': data['current'][str(i)] for i in range(24)} {f'yesterday.{i}': data['current'][str(i)] for i in range(24)}
} }
) )
db.history.update_one( await db.history.update_one(
{"type": "server", "id": data['id']}, {"type": "server", "id": data['id']},
{ {
"$push": "$push":
@ -28,36 +28,36 @@ def save_activity():
} }
) )
def db_sync_hour(): async def db_sync_hour():
logger.info("Регистрация за час") logger.info("Регистрация за час")
for member in list(db.members.find()): async for member in db.members.find():
db.members.update_one({"_id": member["_id"]}, {"$set": {f"history.hour.{int(datetime.now().timestamp())}": member["exp"]}}) await db.members.update_one({"_id": member["_id"]}, {"$set": {f"history.hour.{int(datetime.now().timestamp())}": member["exp"]}})
if 'guild_stat' in member.keys(): if 'guild_stat' in member.keys():
for guild in member["guild_stat"].keys(): for guild in member["guild_stat"].keys():
db.members.update_one({"_id": member["_id"]}, {"$set": {f"guild_stat.{guild}.history.hour.{int(datetime.now().timestamp())}": member["guild_stat"][guild]["exp"]}}) await db.members.update_one({"_id": member["_id"]}, {"$set": {f"guild_stat.{guild}.history.hour.{int(datetime.now().timestamp())}": member["guild_stat"][guild]["exp"]}})
logger.info("Регистрация завершена") logger.info("Регистрация завершена")
def db_sync_day(): async def db_sync_day():
logger.info("Регистрация за день") logger.info("Регистрация за день")
for member in list(db.members.find()): async for member in db.members.find():
db.members.update_one({"_id": member["_id"]}, {"$set": {f"history.day.{int(datetime.now().timestamp())}": member["exp"]}}) await db.members.update_one({"_id": member["_id"]}, {"$set": {f"history.day.{int(datetime.now().timestamp())}": member["exp"]}})
for guild in member["guild_stat"].keys(): for guild in member["guild_stat"].keys():
db.members.update_one({"_id": member["_id"]}, {"$set": {f"guild_stat.{guild}.history.day.{int(datetime.now().timestamp())}": member["guild_stat"][guild]["exp"]}}) await db.members.update_one({"_id": member["_id"]}, {"$set": {f"guild_stat.{guild}.history.day.{int(datetime.now().timestamp())}": member["guild_stat"][guild]["exp"]}})
logger.info("Регистрация завершена") logger.info("Регистрация завершена")
# await self.bot.get_user(self.bot.owner_id).send("Завершено за день????") # await self.bot.get_user(self.bot.owner_id).send("Завершено за день????")
async def main(): async def main(bot):
clear() clear()
every().day.at('00:00:00').do(save_activity) every().day.at('00:00:00').do(lambda: asyncio.run_coroutine_threadsafe(save_activity(), bot.loop))
every().hours.at("00:00").do(db_sync_hour) every().hours.at("00:00").do(lambda: asyncio.run_coroutine_threadsafe(db_sync_hour(), bot.loop))
every().day.at("00:00:00").do(db_sync_day) every().day.at("00:00:00").do(lambda: asyncio.run_coroutine_threadsafe(db_sync_day(), bot.loop))
while True: while True:
run_pending() run_pending()
await asyncio.sleep(1) await asyncio.sleep(1)
async def setup(_): async def setup(bot):
asyncio.create_task(main()) asyncio.create_task(main(bot))