add /retag command
This commit is contained in:
parent
d6372671be
commit
e291a41ea9
1 changed files with 38 additions and 16 deletions
54
delojza.py
54
delojza.py
|
@ -13,6 +13,7 @@ from configparser import ConfigParser
|
|||
from datetime import datetime, timedelta
|
||||
from glob import glob
|
||||
from operator import itemgetter
|
||||
from random import random
|
||||
|
||||
import acoustid
|
||||
import filetype
|
||||
|
@ -60,6 +61,7 @@ class DelojzaBot:
|
|||
dp.add_handler(CommandHandler("stats", self.tg_stats))
|
||||
dp.add_handler(CommandHandler("orphans", self.tg_orphan))
|
||||
dp.add_handler(CommandHandler("orphans_full", self.tg_orphan_full))
|
||||
dp.add_handler(CommandHandler("retag", self.tg_retag))
|
||||
dp.add_handler(CommandHandler("delete", self.tg_delete))
|
||||
dp.add_handler(CommandHandler("version", self.tg_version))
|
||||
dp.add_handler(MessageHandler(None, self.tg_handle))
|
||||
|
@ -94,7 +96,22 @@ class DelojzaBot:
|
|||
filepath = unicodedata.normalize('NFKD', filepath).encode('ascii', 'ignore').decode('ascii')
|
||||
return re.sub(r'[^\w.()\[\]{}#-]', '_', filepath)
|
||||
|
||||
def tag_file(self, filepath, message, info=None):
|
||||
@staticmethod
|
||||
def _tag_file(filepath, artist, title):
|
||||
try:
|
||||
id3 = mutagen.id3.ID3(filepath)
|
||||
except mutagen.id3.ID3NoHeaderError:
|
||||
mutafile = mutagen.File(filepath)
|
||||
mutafile.add_tags()
|
||||
mutafile.save()
|
||||
id3 = mutagen.id3.ID3(filepath)
|
||||
id3.add(mutagen.id3.TIT2(encoding=3, text=title))
|
||||
if artist:
|
||||
id3.add(mutagen.id3.TOPE(encoding=3, text=artist))
|
||||
id3.add(mutagen.id3.TPE1(encoding=3, text=artist))
|
||||
id3.save()
|
||||
|
||||
def _autotag_file(self, filepath, message, info=None):
|
||||
if info is None:
|
||||
info = {}
|
||||
|
||||
|
@ -154,18 +171,7 @@ class DelojzaBot:
|
|||
|
||||
message.reply_text("Tagging as \"{}\" by \"{}\"\nvia {}".format(title, artist, source))
|
||||
self.logger.info("Tagging {} w/ {} - {} [{}]...".format(filepath, title, artist, source))
|
||||
try:
|
||||
id3 = mutagen.id3.ID3(filepath)
|
||||
except mutagen.id3.ID3NoHeaderError:
|
||||
mutafile = mutagen.File(filepath)
|
||||
mutafile.add_tags()
|
||||
mutafile.save()
|
||||
id3 = mutagen.id3.ID3(filepath)
|
||||
id3.add(mutagen.id3.TIT2(encoding=3, text=title))
|
||||
if artist:
|
||||
id3.add(mutagen.id3.TOPE(encoding=3, text=artist))
|
||||
id3.add(mutagen.id3.TPE1(encoding=3, text=artist))
|
||||
id3.save()
|
||||
self._tag_file(filepath, artist, title)
|
||||
|
||||
# noinspection PyUnusedLocal
|
||||
def download_ytdl(self, urls, out_path, date, message, audio=False, filetitle=None):
|
||||
|
@ -189,7 +195,7 @@ class DelojzaBot:
|
|||
globbeds = glob(os.path.splitext(filename)[0] + '.*')
|
||||
for globbed in globbeds:
|
||||
if globbed.endswith("mp3"):
|
||||
self.tag_file(globbed, message, info=info)
|
||||
self._autotag_file(globbed, message, info=info)
|
||||
self.logger.info("Moving %s to %s..." % (globbed, out_path))
|
||||
dest = shutil.move(globbed, out_path)
|
||||
filenames.append(dest)
|
||||
|
@ -227,7 +233,7 @@ class DelojzaBot:
|
|||
except mutagen.id3.ID3NoHeaderError:
|
||||
untagged = True
|
||||
if untagged:
|
||||
self.tag_file(final_filename, message)
|
||||
self._autotag_file(final_filename, message)
|
||||
|
||||
return filenames
|
||||
|
||||
|
@ -442,6 +448,23 @@ class DelojzaBot:
|
|||
if len(tmp_reply) > 0:
|
||||
update.message.reply_text(tmp_reply)
|
||||
|
||||
def tg_retag(self, _, update):
|
||||
message_is_sensible = update.message.text.count("-") == 1
|
||||
if self.last_downloaded is not None and message_is_sensible:
|
||||
chat, files, hashtags, tumblr_ids = self.last_downloaded
|
||||
if chat == update.message.chat:
|
||||
mp3s = [filename for filename in files if filename.endswith("mp3")]
|
||||
if len(mp3s) > 0:
|
||||
tagline = re.sub(r'^/[\w]+', '', update.message.text).split("-")
|
||||
artist = tagline[0].strip()
|
||||
title = tagline[1].strip()
|
||||
for mp3 in mp3s:
|
||||
self._tag_file(mp3, artist, title)
|
||||
update.message.reply_text("Tagging \"{}\" as \"{}\" by \"{}\"!"
|
||||
.format(mp3[len(self.out_dir) + 1:], title, artist))
|
||||
return
|
||||
update.message.reply_text((self.markov.make_sentence() if self.markov and random() > .7 else "") + "???")
|
||||
|
||||
def tg_delete(self, _, update):
|
||||
if self.last_downloaded is not None:
|
||||
chat, files, hashtags, tumblr_ids = self.last_downloaded
|
||||
|
@ -466,7 +489,6 @@ class DelojzaBot:
|
|||
self.tumblr_client.delete_post(self.tumblr_name, tumblr_id)
|
||||
self.last_downloaded = None
|
||||
return
|
||||
|
||||
update.message.reply_text("Nothing to remove!")
|
||||
|
||||
# noinspection PyMethodMayBeStatic
|
||||
|
|
Loading…
Reference in a new issue