[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
+6 -5
View File
@@ -7,6 +7,7 @@ from datetime import datetime, timedelta, timezone
from matplotlib import pyplot as plt
from matplotlib import ticker, markers
from loguru import logger
from asyncio import run_coroutine_threadsafe
class ActiveCount(commands.Cog):
@@ -18,11 +19,11 @@ class ActiveCount(commands.Cog):
self.daysoftheweek = ("monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday")
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):
if not db.history.find_one({"type": "server", "id": server_id}):
db.history.insert_one({
async def add_server(self, server_id: int):
if not (await db.history.find_one({"type": "server", "id": server_id})):
await db.history.insert_one({
"type": "server",
"id": server_id,
"history": {
@@ -66,7 +67,7 @@ class ActiveCount(commands.Cog):
day = datetime.now().weekday()
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:
await inter.response.send_message("Недостаточно данных! Попробуйте завтра")
+39 -39
View File
@@ -52,8 +52,8 @@ class Economic(commands.Cog, name="Экономика"):
@commands.Cog.listener()
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))):
data = db.members.find_one({"id": message.author.id})
flood_channels = db.guild_settings.find_one({"id": message.guild.id})
data = await db.members.find_one({"id": message.author.id})
flood_channels = await db.guild_settings.find_one({"id": message.guild.id})
if flood_channels is None:
flood_channels = []
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:
delta_exp = len(message.content) + len(message.attachments)*100
db.history.update_one(
await db.history.update_one(
{'type': 'server', 'id': message.guild.id},
{'$inc': {f'current.{datetime.now().hour}': delta_exp}}
)
@@ -72,23 +72,23 @@ class Economic(commands.Cog, name="Экономика"):
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
data = db.members.find_one({"id": message.author.id})
data = await db.members.find_one({"id": message.author.id})
if data is not None:
level = data["level"]
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
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
# Локальные опыт/уровень
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():
db.members.update_many({"id": message.author.id},
if (await db.members.find_one({"id": message.author.id, f'guild_stat.{message.guild.id}': {'$exists': 0}})):
await db.members.update_many({"id": message.author.id},
{"$set": {
f"{prefix}.exp": 0,
f"{prefix}.level": 0,
@@ -101,15 +101,15 @@ class Economic(commands.Cog, name="Экономика"):
}
}}) # Создаем в guild_stat поле для сервера
data = db.members.find_one({"id": message.author.id})["guild_stat"][str(message.guild.id)]
db.members.update_one({"id": message.author.id},
data = (await db.members.find_one({"id": message.author.id}))["guild_stat"][str(message.guild.id)]
await db.members.update_one({"id": message.author.id},
{"$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"]
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}})
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":
await message.reply(
embed=discord.Embed(
@@ -120,7 +120,7 @@ class Economic(commands.Cog, name="Экономика"):
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()
@@ -142,9 +142,9 @@ class Economic(commands.Cog, name="Экономика"):
else:
humans = list(filter(lambda x: not x.bot, before.channel.members))
if len(humans) == 1:
self.voice_register(humans[0], before)
await self.voice_register(humans[0], before)
if len(humans) != 0:
self.voice_register(member, before)
await self.voice_register(member, before)
# При выходе
if after.channel is None:
@@ -152,7 +152,7 @@ class Economic(commands.Cog, name="Экономика"):
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():
secs = (datetime.now() - self.bot.voice_counter[member.id]).seconds
else:
@@ -171,7 +171,7 @@ class Economic(commands.Cog, name="Экономика"):
k *= 2
exp = int(secs // 5 * k)
money = exp * rint(1, 5)
db.members.update_one({"id": member.id}, {
await db.members.update_one({"id": member.id}, {
"$inc": {
f"guild_stat.{member.guild.id}.secs_in_voice": secs,
f"guild_stat.{member.guild.id}.exp": exp,
@@ -179,7 +179,7 @@ class Economic(commands.Cog, name="Экономика"):
"money": money
}})
db.history.update_one(
await db.history.update_one(
{'type': 'server', 'id': member.guild.id},
{"$inc": {f'current.{datetime.now().hour}': exp}}
)
@@ -196,7 +196,7 @@ class Economic(commands.Cog, name="Экономика"):
@commands.Cog.listener()
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:
logger.warning("Пользователь не найден")
@@ -204,30 +204,30 @@ class Economic(commands.Cog, name="Экономика"):
if str(member.guild.id) in member_data["guild_stat"].keys():
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},
{"$inc": {"exp": member_data["guild_stat"][str(member.guild.id)]["exp"]}}
)
@commands.Cog.listener()
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:
logger.warning("Пользователь не найден")
return
if str(member.guild.id) in member_data["guild_stat"].keys():
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},
{"$dec": {"exp": member_data["guild_stat"][str(member.guild.id)]["exp"]}
})
@commands.Cog.listener()
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")
db.members.update_one(
await db.members.update_one(
{"id": m['id']},
{"$inc": {"exp": m["guild_stat"][str(guild.id)]["exp"]}
})
@@ -235,9 +235,9 @@ class Economic(commands.Cog, name="Экономика"):
@commands.Cog.listener()
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")
db.members.update_one(
await db.members.update_one(
{"id": m['id']},
{"$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"))
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():
await inter.response.send_message("Об этом пользователе информации пока нет")
return
@@ -259,7 +259,7 @@ class Economic(commands.Cog, name="Экономика"):
if str(user.id) in self.bot.voice_counter.keys():
prefix = f"guild_stat.{inter.guild.id}"
if str(inter.guild.id) not in user_data["guild_stat"].keys():
db.members.update_many(
await db.members.update_many(
{"id": user.id},
{"$set": {
f"{prefix}.exp": 0,
@@ -272,9 +272,9 @@ class Economic(commands.Cog, name="Экономика"):
}}
) # Создаем в 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 inter.guild is not None:
@@ -353,7 +353,7 @@ class Economic(commands.Cog, name="Экономика"):
color = discord.Color(0xaaffaa)
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_:
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):
m = data_[place]
if 'level' not in m['guild_stat'][str(inter.guild.id)].keys():
db.members.update_one(
await db.members.update_one(
{'id': m['id']},
{'$set': {f'guild_stat.{inter.guild.id}.level': 0}}
)
@@ -426,10 +426,10 @@ class Economic(commands.Cog, name="Экономика"):
db_ = db.members
info1 = 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']
info1[str(int(ts))] = 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']
info1 = await db_.find_one({"id": user1})['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))] = await db_.find_one({"id": user1})['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:
@@ -491,7 +491,7 @@ class Economic(commands.Cog, name="Экономика"):
ts = datetime.now().timestamp()
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:
await inter.response.send_message("Недостаточно данных. Попробуйте завтра")
+15 -15
View File
@@ -17,22 +17,22 @@ class privateChannels(commands.Cog, name="Приватные комнаты"):
@commands.Cog.listener()
async def on_voice_state_update(self, member, before, after):
for chan in [i["id"] for i in db.private_channels.find()]:
if not self.bot.get_channel(chan):
db.private_channels.delete_one({"id": chan})
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]
if (
before.channel and
(await db.private_channels.find_one({'id': before.channel.id})) and
not self.bot.get_channel(before.channel.id)
):
await db.private_channels.delete_one({'id': before.channel.id})
if (
before.channel is not None and
len(before.channel.members) == 0 and
before.channel.id not in v_channels and
before.channel.category_id in v_categories
before.channel and
len(before.channel.members) == 0 and
not (await db.private_channels.find_one({'id': before.channel.id})) and
(await db.private_channels.find_one({'category_id': before.channel.category_id}))
):
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={
# member: discord.PermissionOverwrite(manage_channels=True,
# move_members=True,
@@ -66,11 +66,11 @@ class privateChannels(commands.Cog, name="Приватные комнаты"):
"находитесь в главный")
@commands.check(is_white)
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()
message = await ctx.send('Канал уже добавлен')
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)
message = ctx.message
@@ -91,8 +91,8 @@ class privateChannels(commands.Cog, name="Приватные комнаты"):
message = await ctx.send("Зайдите в ГК")
await self.bot.wait_for("voice_state_update", check=lambda member, _, after: \
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()]:
db.private_channels.delete_one({"id": ctx.author.voice.channel.id})
if (await db.private_channels.find_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)
else:
await message.edit(content='Этот канал не является приватным')
+18 -18
View File
@@ -6,10 +6,10 @@ from loguru import logger
daysoftheweek = ("monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday")
def save_activity():
async def save_activity():
day = (datetime.now()-timedelta(1)).weekday()
for data in db.history.find({"type": "server"}):
db.history.update_one(
async for data in db.history.find({"type": "server"}):
await db.history.update_one(
{"type": "server", "id": data['id']},
{
"$push":
@@ -18,7 +18,7 @@ def save_activity():
{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']},
{
"$push":
@@ -28,36 +28,36 @@ def save_activity():
}
)
def db_sync_hour():
async def db_sync_hour():
logger.info("Регистрация за час")
for member in list(db.members.find()):
db.members.update_one({"_id": member["_id"]}, {"$set": {f"history.hour.{int(datetime.now().timestamp())}": member["exp"]}})
async for member in db.members.find():
await db.members.update_one({"_id": member["_id"]}, {"$set": {f"history.hour.{int(datetime.now().timestamp())}": member["exp"]}})
if 'guild_stat' in member.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("Регистрация завершена")
def db_sync_day():
async def db_sync_day():
logger.info("Регистрация за день")
for member in list(db.members.find()):
db.members.update_one({"_id": member["_id"]}, {"$set": {f"history.day.{int(datetime.now().timestamp())}": member["exp"]}})
async for member in db.members.find():
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():
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("Регистрация завершена")
# await self.bot.get_user(self.bot.owner_id).send("Завершено за день????")
async def main():
async def main(bot):
clear()
every().day.at('00:00:00').do(save_activity)
every().hours.at("00:00").do(db_sync_hour)
every().day.at("00:00:00").do(db_sync_day)
every().day.at('00:00:00').do(lambda: asyncio.run_coroutine_threadsafe(save_activity(), bot.loop))
every().hours.at("00:00").do(lambda: asyncio.run_coroutine_threadsafe(db_sync_hour(), bot.loop))
every().day.at("00:00:00").do(lambda: asyncio.run_coroutine_threadsafe(db_sync_day(), bot.loop))
while True:
run_pending()
await asyncio.sleep(1)
async def setup(_):
asyncio.create_task(main())
async def setup(bot):
asyncio.create_task(main(bot))