Update deps versions, minor spotify fix, removed db sync, suppress deprecationwarning
This commit is contained in:
2
.gitignore
vendored
2
.gitignore
vendored
@@ -7,4 +7,4 @@ config.toml
|
||||
*/__pycache__/
|
||||
.cache
|
||||
|
||||
db
|
||||
db.db
|
||||
|
||||
@@ -8,6 +8,3 @@ router = Router()
|
||||
@router.startup()
|
||||
async def startup(bot: Bot):
|
||||
print(f'[green]Started as[/] @{(await bot.me()).username}')
|
||||
|
||||
from bot.modules.database import pull
|
||||
await pull()
|
||||
|
||||
@@ -36,5 +36,3 @@ async def on_new_chosen(chosen_result: ChosenInlineResult, bot: Bot):
|
||||
media=InputMediaAudio(media=audio.audio.file_id),
|
||||
reply_markup=None
|
||||
)
|
||||
|
||||
await db.occasionally_write()
|
||||
|
||||
@@ -98,4 +98,3 @@ async def on_cached_chosen(chosen_result: ChosenInlineResult, bot: Bot,
|
||||
else:
|
||||
db.youtube[song_id] = audio.audio.file_id
|
||||
db.recoded[song_id] = True
|
||||
await db.occasionally_write()
|
||||
|
||||
@@ -35,5 +35,3 @@ async def on_new_chosen(chosen_result: ChosenInlineResult, bot: Bot):
|
||||
media=InputMediaAudio(media=audio.audio.file_id),
|
||||
reply_markup=None
|
||||
)
|
||||
|
||||
await db.occasionally_write()
|
||||
|
||||
@@ -156,5 +156,3 @@ async def on_new_chosen(chosen_result: ChosenInlineResult, bot: Bot,
|
||||
db.recoded[yt_song.id] = audio.message_id
|
||||
if settings['exact_spotify_search'].value == 'yes':
|
||||
db.recoded[song.id] = audio.message_id
|
||||
|
||||
await db.occasionally_write()
|
||||
|
||||
@@ -79,5 +79,3 @@ async def on_new_chosen(chosen_result: ChosenInlineResult, bot: Bot,
|
||||
)
|
||||
else:
|
||||
db.recoded[song.id] = audio.message_id
|
||||
|
||||
await db.occasionally_write()
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
from .db import Db
|
||||
from .pull_db import pull
|
||||
|
||||
|
||||
db = Db()
|
||||
|
||||
__all__ = ['db', 'pull']
|
||||
__all__ = ['db']
|
||||
|
||||
@@ -1,13 +1,4 @@
|
||||
from .db_model import DBDict
|
||||
import os.path
|
||||
from bot.utils.config import config
|
||||
|
||||
from random import randint
|
||||
|
||||
DB = os.path.join(config.local.db_path, 'db')
|
||||
|
||||
if not os.path.isfile(DB):
|
||||
open('sync', 'w')
|
||||
|
||||
|
||||
class Db(object):
|
||||
@@ -22,10 +13,3 @@ class Db(object):
|
||||
self.youtube = DBDict('youtube')
|
||||
self.soundcloud = DBDict('soundcloud')
|
||||
self.recoded = DBDict('recoded')
|
||||
|
||||
async def write(self):
|
||||
await self.config.write()
|
||||
|
||||
async def occasionally_write(self, chance: int = 5):
|
||||
if randint(1, chance) == 1:
|
||||
await self.write()
|
||||
|
||||
@@ -1,49 +1,7 @@
|
||||
from sqlitedict import SqliteDict
|
||||
from bot.utils.config import config
|
||||
from aiogram.types import FSInputFile, InputMediaDocument
|
||||
from aiogram import exceptions
|
||||
from pydantic import ValidationError
|
||||
import time
|
||||
from .meta import DBMeta
|
||||
import os.path
|
||||
|
||||
DB = os.path.join(config.local.db_path, 'db')
|
||||
DB_CHAT = config.telegram.db_chat
|
||||
|
||||
|
||||
class DBDict(SqliteDict):
|
||||
def __init__(self, tablename: str):
|
||||
super().__init__(DB, tablename=tablename, autocommit=True)
|
||||
|
||||
async def write(self):
|
||||
from bot.common import bot
|
||||
|
||||
try:
|
||||
DBMeta().update_time = time.time_ns()
|
||||
|
||||
await bot.edit_message_media(
|
||||
media=InputMediaDocument(media=FSInputFile(DB)),
|
||||
chat_id=DB_CHAT,
|
||||
message_id=DBMeta().message_id
|
||||
)
|
||||
await bot.edit_message_caption(
|
||||
caption=str(DBMeta()),
|
||||
chat_id=DB_CHAT,
|
||||
message_id=DBMeta().message_id
|
||||
)
|
||||
|
||||
except (ValidationError, exceptions.TelegramBadRequest):
|
||||
DBMeta().update_time = time.time_ns()
|
||||
|
||||
self['db_message_id'] = (
|
||||
await bot.send_document(
|
||||
chat_id=DB_CHAT, document=FSInputFile(DB),
|
||||
disable_notification=True
|
||||
)
|
||||
).message_id
|
||||
|
||||
DBMeta().message_id = self['db_message_id']
|
||||
await bot.edit_message_caption(
|
||||
caption=str(DBMeta()),
|
||||
chat_id=DB_CHAT, message_id=self.get('db_message_id')
|
||||
)
|
||||
super().__init__(config.local.db_path, tablename=tablename, autocommit=True)
|
||||
|
||||
@@ -1,109 +0,0 @@
|
||||
import os.path
|
||||
from bot.utils.config import config
|
||||
from aiogram.exceptions import TelegramBadRequest
|
||||
import asyncio
|
||||
|
||||
from typing import Coroutine
|
||||
|
||||
loop = asyncio.get_event_loop()
|
||||
|
||||
|
||||
DBMETA = os.path.join(config.local.db_path, 'dbmeta')
|
||||
APP_ID = config.local.app_id
|
||||
DB_CHAT = config.telegram.db_chat
|
||||
|
||||
|
||||
def meta_property(prop_name):
|
||||
def getter(self):
|
||||
return self[prop_name]
|
||||
|
||||
def setter(self, value):
|
||||
self[prop_name] = value
|
||||
|
||||
return property(getter, setter)
|
||||
|
||||
|
||||
class DBMeta:
|
||||
app_id = meta_property('app_id')
|
||||
message_id = meta_property('message_id')
|
||||
update_time = meta_property('update_time')
|
||||
|
||||
def __init__(self):
|
||||
if not os.path.isfile(DBMETA):
|
||||
open(DBMETA, 'w').write(f'{APP_ID}|None|0')
|
||||
|
||||
def __getitem__(self, item):
|
||||
try:
|
||||
return open(DBMETA).read().split('|')[{
|
||||
"app_id": 0,
|
||||
"message_id": 1,
|
||||
"update_time": 2
|
||||
}.get(item)]
|
||||
except TypeError:
|
||||
return None
|
||||
|
||||
def __setitem__(self, key, value):
|
||||
meta = open(DBMETA).read().split('|')
|
||||
meta[{
|
||||
"app_id": 0,
|
||||
"message_id": 1,
|
||||
"update_time": 2
|
||||
}[key]] = value
|
||||
open(DBMETA, 'w').write('|'.join(str(x) for x in meta))
|
||||
|
||||
def __str__(self):
|
||||
return open(DBMETA).read()
|
||||
|
||||
|
||||
def cloud_meta_property(self, prop_name):
|
||||
async def getter():
|
||||
return await self.get(prop_name)
|
||||
|
||||
return getter()
|
||||
|
||||
|
||||
class CloudMeta:
|
||||
def __init__(self):
|
||||
def prop_generator(name) -> Coroutine:
|
||||
return cloud_meta_property(self, name)
|
||||
|
||||
self.app_id = prop_generator('app_id')
|
||||
self.message_id = prop_generator('message_id')
|
||||
self.update_time = prop_generator('update_time')
|
||||
|
||||
@staticmethod
|
||||
async def get(item):
|
||||
from bot.common import bot
|
||||
|
||||
try:
|
||||
if not DBMeta().update_time or not bot.cloudmeta_message_text:
|
||||
raise AttributeError
|
||||
|
||||
except AttributeError:
|
||||
try:
|
||||
message = await bot.forward_message(
|
||||
DB_CHAT, DB_CHAT,
|
||||
DBMeta().message_id
|
||||
)
|
||||
|
||||
bot.cloudmeta_message_text = message.caption
|
||||
|
||||
await message.delete()
|
||||
|
||||
except TelegramBadRequest:
|
||||
print('Cannot get CloudMeta - writing DBDict')
|
||||
from .db_model import DBDict
|
||||
await DBDict('config').write()
|
||||
message = await bot.forward_message(
|
||||
DB_CHAT, DB_CHAT,
|
||||
DBMeta().message_id
|
||||
)
|
||||
bot.cloudmeta_message_text = message.caption
|
||||
await message.delete()
|
||||
|
||||
cloudmeta = bot.cloudmeta_message_text.split('|')
|
||||
return cloudmeta[{
|
||||
"app_id": 0,
|
||||
"message_id": 1,
|
||||
"update_time": 2
|
||||
}.get(item)]
|
||||
@@ -1,60 +0,0 @@
|
||||
import os
|
||||
from .meta import DBMeta, CloudMeta
|
||||
from bot.utils.config import config
|
||||
from sqlitedict import SqliteDict
|
||||
|
||||
DB = os.path.join(config.local.db_path, 'db')
|
||||
DB_CHAT = config.telegram.db_chat
|
||||
|
||||
|
||||
async def pull():
|
||||
from bot.common import bot
|
||||
|
||||
if DBMeta().message_id == 'None':
|
||||
from . import db
|
||||
print('No dbmeta file')
|
||||
if msg_id := db.config.get('db_message_id'):
|
||||
print('Found message id in in-db config')
|
||||
DBMeta().message_id = msg_id
|
||||
await db.write()
|
||||
|
||||
if not os.path.isfile('sync'):
|
||||
try:
|
||||
if not bot.cloudmeta_message_text:
|
||||
print('Cloudmeta initialized incorrectly')
|
||||
raise AttributeError
|
||||
else:
|
||||
return
|
||||
except AttributeError:
|
||||
if int(DBMeta().update_time) >= int(await CloudMeta().update_time):
|
||||
print('DB is up-to-date')
|
||||
return
|
||||
else:
|
||||
print('Database file is new. Trying to download cloud data')
|
||||
os.remove('sync')
|
||||
|
||||
print('DB is not up-to-date')
|
||||
|
||||
message = await bot.forward_message(DB_CHAT, DB_CHAT, DBMeta().message_id)
|
||||
|
||||
await message.delete()
|
||||
|
||||
await bot.download(
|
||||
message.document,
|
||||
destination=DB + 'b'
|
||||
)
|
||||
|
||||
from . import db
|
||||
for table in db.__dict__.keys():
|
||||
new_table = SqliteDict(DB + 'b', tablename=table)
|
||||
for key in new_table.keys():
|
||||
if key is not None:
|
||||
try:
|
||||
getattr(db, table)[key] = new_table[key]
|
||||
except Exception as e:
|
||||
assert e
|
||||
new_table.close()
|
||||
|
||||
await db.write()
|
||||
|
||||
print('Synced')
|
||||
@@ -1,5 +1,5 @@
|
||||
# https://pypi.org/project/music-helper/
|
||||
|
||||
import warnings
|
||||
import re
|
||||
import hashlib
|
||||
|
||||
@@ -64,11 +64,13 @@ class ChunkDecrypter:
|
||||
|
||||
@classmethod
|
||||
def from_track_id(cls, track_id: str):
|
||||
cipher = Cipher(
|
||||
algorithms.Blowfish(get_blowfish_key(track_id)),
|
||||
modes.CBC(bytes([i for i in range(8)])),
|
||||
default_backend()
|
||||
)
|
||||
with warnings.catch_warnings():
|
||||
warnings.filterwarnings("ignore")
|
||||
cipher = Cipher(
|
||||
algorithms.Blowfish(get_blowfish_key(track_id)),
|
||||
modes.CBC(bytes([i for i in range(8)])),
|
||||
default_backend()
|
||||
)
|
||||
|
||||
return cls(
|
||||
cipher=cipher
|
||||
|
||||
@@ -10,7 +10,9 @@ class Spotify(object):
|
||||
client_credentials_manager=SpotifyClientCredentials(
|
||||
client_id=client_id,
|
||||
client_secret=client_secret
|
||||
)
|
||||
),
|
||||
backoff_factor=0.1,
|
||||
retries=10
|
||||
)
|
||||
|
||||
self.songs = Songs(self.spotify)
|
||||
|
||||
@@ -1,11 +1,10 @@
|
||||
[telegram]
|
||||
bot_token = ''
|
||||
db_chat = 0
|
||||
files_chat = 0
|
||||
admin_id = 0
|
||||
|
||||
[local]
|
||||
db_path = 'db/'
|
||||
db_path = 'db.db'
|
||||
app_id = 'ANY-MUSIC-BOT'
|
||||
|
||||
[tokens.spotify]
|
||||
|
||||
@@ -6,6 +6,8 @@ authors = ["BarsTiger"]
|
||||
readme = "README.md"
|
||||
|
||||
[tool.poetry.dependencies]
|
||||
wheel = "^0.43.0"
|
||||
setuptools = "^70.2.0"
|
||||
python = "^3.11"
|
||||
aiogram = "^3.1.1"
|
||||
rich = "^13.6.0"
|
||||
@@ -19,8 +21,8 @@ pydub = "^0.25.1"
|
||||
aiohttp = "^3.8.6"
|
||||
nest-asyncio = "^1.5.8"
|
||||
icecream = "^2.1.3"
|
||||
m3u8 = "^3.6.0"
|
||||
cryptography = "^41.0.7"
|
||||
m3u8 = "^5.1.0"
|
||||
cryptography = "^42.0.8"
|
||||
|
||||
|
||||
[build-system]
|
||||
|
||||
Reference in New Issue
Block a user