529 lines
30 KiB
Python
529 lines
30 KiB
Python
![]() |
# -*- coding: utf-8 -*-
|
|||
|
##################################################################################################### SOF
|
|||
|
import irc3
|
|||
|
from irc3.plugins.command import command
|
|||
|
from urllib.parse import urlparse
|
|||
|
from glob import glob
|
|||
|
from typing import Type
|
|||
|
import random
|
|||
|
import string
|
|||
|
import os
|
|||
|
######################################################################################################### THE ASCII LOGO TO BE USED
|
|||
|
MOTD="""
|
|||
|
_________ _________ _________ ___ ___ _________ _________ ____ ____
|
|||
|
| o ) / O \ / O \ | \ / | | o ) / O \ \ \_/ /
|
|||
|
|_____O___) \_________/ \_________/ |____|____| |_____O___) \_________/ /___/%\___\\
|
|||
|
'BBBBBBB' 'BBBBBBB' 'BBBBBBB' 'BBBBBBB' 'BBBBBBB' 'BBBBBBB' 'BB' 'BB'
|
|||
|
"""
|
|||
|
#########################################################################################################
|
|||
|
class BOOMBOX_COLORS():
|
|||
|
#####################################################################################################
|
|||
|
def __init__(self,bot):
|
|||
|
self.bot=bot
|
|||
|
self.c=[]
|
|||
|
#####################################################################################################
|
|||
|
def color(self,c):
|
|||
|
try:
|
|||
|
c=str(c.lower())
|
|||
|
if c=='0': return '\x0300'
|
|||
|
if c=='1': return '\x0301'
|
|||
|
if c=='2': return '\x0302'
|
|||
|
if c=='3': return '\x0303'
|
|||
|
if c=='4': return '\x0304'
|
|||
|
if c=='5': return '\x0305'
|
|||
|
if c=='6': return '\x0306'
|
|||
|
if c=='7': return '\x0307'
|
|||
|
if c=='8': return '\x0308'
|
|||
|
if c=='9': return '\x0309'
|
|||
|
if c=='a': return '\x0310'
|
|||
|
if c=='b': return '\x0311'
|
|||
|
if c=='c': return '\x0312'
|
|||
|
if c=='d': return '\x0313'
|
|||
|
if c=='e': return '\x0314'
|
|||
|
if c=='f': return '\x0315'
|
|||
|
if c=='n': return ''
|
|||
|
if c=='t': return '\x0f'
|
|||
|
print('color: empty')
|
|||
|
return '\x0f'
|
|||
|
except:
|
|||
|
print('color: error')
|
|||
|
return '\x0f'
|
|||
|
#####################################################################################################
|
|||
|
def palette(self):
|
|||
|
self.c=[]; self.n=[]
|
|||
|
for i in range(0,8):
|
|||
|
n=random.randint(0,15)
|
|||
|
c=self.color(hex(n)[2:])
|
|||
|
self.c.append(c); self.n.append(n)
|
|||
|
return self.c
|
|||
|
#####################################################################################################
|
|||
|
def tailor(self,s,n):
|
|||
|
if len(s)<=n:
|
|||
|
result=s+"."*(n-len(s))
|
|||
|
return result
|
|||
|
else:
|
|||
|
return s[0:n]
|
|||
|
#########################################################################################################
|
|||
|
class BOOMBOX_STATS:
|
|||
|
#####################################################################################################
|
|||
|
def __init__(self,bot):
|
|||
|
self.bot=bot
|
|||
|
self.b1,self.b2,self.b3,self.b4=self.bot.bbc.palette()[0:4]
|
|||
|
self.b5,self.b6,self.b7,self.b8=self.bot.bbc.palette()[0:4]
|
|||
|
return
|
|||
|
#####################################################################################################
|
|||
|
def push(self,nick,title,url):
|
|||
|
nick=self.no_unicode(nick)
|
|||
|
title=self.no_unicode(title)
|
|||
|
bbs_last=self.bot.db.getlist("bbs_last")
|
|||
|
bbs_last=bbs_last[-1:]+bbs_last[:-1]
|
|||
|
bbs_last[0]=[self.bot.bbc.tailor(nick,10),'╏',self.bot.bbc.tailor(title,65),'╏',url]
|
|||
|
self.bot.db.setlist("bbs_last",bbs_last)
|
|||
|
#####################################################################################################
|
|||
|
def dbiterate(self,db,s):
|
|||
|
buffer=self.bot.db.getlist(db)
|
|||
|
for _ in buffer:
|
|||
|
try:
|
|||
|
result=_[s]
|
|||
|
if result:
|
|||
|
return result
|
|||
|
except:
|
|||
|
pass
|
|||
|
#####################################################################################################
|
|||
|
def token(self,url):
|
|||
|
bbs_token=self.bot.db.getlist("bbs_token")
|
|||
|
bbs_tokenmirror=self.bot.db.getlist("bbs_tokenmirror")
|
|||
|
S=list(string.ascii_letters+string.digits)
|
|||
|
random.shuffle(S)
|
|||
|
S=''.join(S)[:5]
|
|||
|
while S in [list(x.keys())[0] for x in bbs_token]:
|
|||
|
S=list(string.ascii_letters+string.digits)
|
|||
|
random.shuffle(S); S=''.join(S)[:5]
|
|||
|
return f'{S}'
|
|||
|
#####################################################################################################
|
|||
|
def no_unicode(self,s):
|
|||
|
if len(s) < 1: return s
|
|||
|
s=s.encode('ascii','ignore').decode()
|
|||
|
s=s.strip().replace(' ',' ')
|
|||
|
return s
|
|||
|
#####################################################################################################
|
|||
|
def check(self,nick,site,data):
|
|||
|
#################################################################################################
|
|||
|
bbs_nicks=self.bot.db.getlist("bbs_nicks")
|
|||
|
bbs_sites=self.bot.db.getlist("bbs_sites")
|
|||
|
bbs_data=self.bot.db.getlist("bbs_data")
|
|||
|
bbs_token=self.bot.db.getlist("bbs_token")
|
|||
|
bbs_tokenmirror=self.bot.db.getlist("bbs_tokenmirror")
|
|||
|
#################################################################################################
|
|||
|
try:
|
|||
|
if bbs_data:
|
|||
|
for i,_data in enumerate(bbs_data):
|
|||
|
if data['url']==_data['url']:
|
|||
|
_data['hits']+=1
|
|||
|
try:
|
|||
|
_data['nicks'][nick]+=1
|
|||
|
except:
|
|||
|
_data['nicks'].update({nick:1})
|
|||
|
try:
|
|||
|
bbs_nicks[0][nick]+=1
|
|||
|
except:
|
|||
|
bbs_nicks[0].update({nick:1})
|
|||
|
bbs_sites[0][site]+=1
|
|||
|
bbs_data[i]=_data
|
|||
|
self.bot.db.setlist("bbs_nicks",bbs_nicks)
|
|||
|
self.bot.db.setlist("bbs_sites",bbs_sites)
|
|||
|
self.bot.db.setlist("bbs_data",bbs_data)
|
|||
|
return
|
|||
|
#########################################################################################
|
|||
|
try:
|
|||
|
bbs_nicks[0][nick]+=1
|
|||
|
except:
|
|||
|
bbs_nicks[0].update({nick:1})
|
|||
|
#########################################################################################
|
|||
|
self.bot.db.setlist("bbs_nicks",bbs_nicks)
|
|||
|
bbs_sites[0][site]+=1
|
|||
|
self.bot.db.setlist("bbs_sites",bbs_sites)
|
|||
|
bbs_data.append(data)
|
|||
|
self.bot.db.setlist("bbs_data",bbs_data)
|
|||
|
URL=data['url']; TOKEN=data['token']
|
|||
|
bbs_token.append({TOKEN:URL})
|
|||
|
self.bot.db.setlist("bbs_token",bbs_token)
|
|||
|
bbs_tokenmirror.append({URL:TOKEN})
|
|||
|
self.bot.db.setlist("bbs_tokenmirror",bbs_tokenmirror)
|
|||
|
except:
|
|||
|
self.bot.db.setlist("bbs_nicks",[{nick: 1}])
|
|||
|
self.bot.db.setlist("bbs_sites",[{'soundcloud':0,'youtube':0,'spotify':0,'bandcamp':0}])
|
|||
|
bbs_sites=self.bot.db.getlist("bbs_sites")
|
|||
|
bbs_sites[0][site]+=1
|
|||
|
self.bot.db.setlist("bbs_sites",bbs_sites)
|
|||
|
self.bot.db.setlist("bbs_data",[data])
|
|||
|
URL=data['url']; TOKEN=data['token']
|
|||
|
bbs_token.append({TOKEN:URL})
|
|||
|
self.bot.db.setlist("bbs_token",bbs_token)
|
|||
|
bbs_tokenmirror.append({URL:TOKEN})
|
|||
|
self.bot.db.setlist("bbs_tokenmirror",bbs_tokenmirror)
|
|||
|
#####################################################################################################
|
|||
|
def enter(self,nick,url,title):
|
|||
|
#################################################################################################
|
|||
|
token=self.token(url)
|
|||
|
bbs_token=self.bot.db.getlist("bbs_token")
|
|||
|
nick=self.no_unicode(nick)
|
|||
|
title=self.no_unicode(title)
|
|||
|
#################################################################################################
|
|||
|
data={'nicks':{nick:1},'title':title,'url':url,'token':token,'hits':1}
|
|||
|
#################################################################################################
|
|||
|
if not url.find('soundcloud.com')==-1:
|
|||
|
title=title[:title.rfind('by')].replace('Stream','').strip()
|
|||
|
if not title=='SoundCloud - Hear the world’s sound':
|
|||
|
data['title']=title.split('music |')[0].rstrip()
|
|||
|
site='soundcloud'
|
|||
|
data=self.check(nick,site,data)
|
|||
|
url=f"?bb {token}"
|
|||
|
self.push(nick.lower(),title.lower(),url)
|
|||
|
#################################################################################################
|
|||
|
if not url.find('youtube.com')==-1 or not url.find('youtu.be')==-1:
|
|||
|
id=url[-11:]
|
|||
|
result=self.bot.videos_list_by_id(id=id)
|
|||
|
if result:
|
|||
|
site='youtube'
|
|||
|
data=self.check(nick,site,data)
|
|||
|
url=f"?bb {token}"
|
|||
|
self.push(nick.lower(),title.lower(),url)
|
|||
|
#################################################################################################
|
|||
|
if not url.find('spotify.com')==-1:
|
|||
|
offset=url.rfind('/')+1
|
|||
|
try:
|
|||
|
track=title.split('|')[0].split('- song by')[0].strip()
|
|||
|
artist=title.split('|')[0].split('- song by')[1].strip()
|
|||
|
except:
|
|||
|
track=title.split('|')[0].split('- Album by')[0].strip()
|
|||
|
artist=title.split('|')[0].split('- Album by')[1].strip()
|
|||
|
title=f'{artist} - {track}'
|
|||
|
data['title']=title
|
|||
|
site='spotify'
|
|||
|
data=self.check(nick,site,data)
|
|||
|
url=f"?bb {token}"
|
|||
|
self.push(nick.lower(),title.lower(),url)
|
|||
|
#################################################################################################
|
|||
|
if not url.find('bandcamp.com')==-1:
|
|||
|
offset=url.rfind('/')+1
|
|||
|
try:
|
|||
|
track=title.split('|')[0].lower().strip()
|
|||
|
artist=title.split('|')[1].lower().strip()
|
|||
|
except:
|
|||
|
pass
|
|||
|
title=f'{artist} - {track}'
|
|||
|
data['title']=title
|
|||
|
site='bandcamp'
|
|||
|
data=self.check(nick,site,data)
|
|||
|
url=f"?bb {token}"
|
|||
|
self.push(nick.lower(),title.lower(),url)
|
|||
|
#####################################################################################################
|
|||
|
@irc3.extend
|
|||
|
def diagnostics(self,mode,*args):
|
|||
|
#####################################################################################################
|
|||
|
__doc__='''DETERMINED NO DATABASES'''
|
|||
|
#################################################################################################
|
|||
|
if mode==1:
|
|||
|
#############################################################################################
|
|||
|
__doc__='''CREATING DATABASE'''
|
|||
|
bbs_token=self.bot.db.getlist("bbs_token")
|
|||
|
try:
|
|||
|
test=len(bbs_token[0])
|
|||
|
except:
|
|||
|
bbs_token={'00000':'https://ansibomb.com'}
|
|||
|
self.bot.db.setlist("bbs_token",[bbs_token])
|
|||
|
bbs_tokenmirror={'https://ansibomb.com':'00000'}
|
|||
|
self.bot.db.setlist("bbs_tokenmirror",[bbs_tokenmirror])
|
|||
|
#############################################################################################
|
|||
|
__doc__='''CREATING DATABASE'''
|
|||
|
bbs_nicks=self.bot.db.getlist("bbs_nicks")
|
|||
|
try:
|
|||
|
test=len(bbs_nicks[0])
|
|||
|
except:
|
|||
|
bbs_nicks=[]
|
|||
|
_bbs_nicks={'none':0}
|
|||
|
bbs_nicks.append(_bbs_nicks)
|
|||
|
self.bot.db.setlist("bbs_nicks",bbs_nicks)
|
|||
|
#############################################################################################
|
|||
|
__doc__='''CREATING DATABASE'''
|
|||
|
bbs_last=self.bot.db.getlist("bbs_last")
|
|||
|
try:
|
|||
|
test=len(bbs_last[0])
|
|||
|
except:
|
|||
|
bbs_last=[]
|
|||
|
for _ in range(10):
|
|||
|
bbs_last.append('')
|
|||
|
self.bot.db.setlist("bbs_last",bbs_last)
|
|||
|
#############################################################################################
|
|||
|
__doc__='''CREATING DATABASE'''
|
|||
|
bbs_data=self.bot.db.getlist('bbs_data')
|
|||
|
try:
|
|||
|
test=len(bbs_data[0])
|
|||
|
except:
|
|||
|
data={'nicks':{"none":0},'title':"none",'url':'https://ansibomb.com','token':'13666','hits':0}
|
|||
|
bbs_data=self.bot.db.setlist('bbs_data',[data])
|
|||
|
#############################################################################################
|
|||
|
__doc__='''CREATING DATABASE'''
|
|||
|
bbs_sites=self.bot.db.getlist('bbs_sites')
|
|||
|
try:
|
|||
|
test=len(bbs_sites[0])
|
|||
|
except:
|
|||
|
data={'nicks':{"databases initialized":0},'title':"no music data yet",'url':'https://ansibomb.com','hits':0}
|
|||
|
bbs_sites=self.bot.db.setlist("bbs_sites",[{'soundcloud':0,'youtube':0,'spotify':0,'bandcamp':0}])
|
|||
|
######################################################################################################### < HERE < HERE < HERE < HERE <
|
|||
|
# <<<<<<<<<<<<<<<<<<<<<<<<<<<<<< the stats portion of boombox is above >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> # < HERE < HERE < HERE < HERE <
|
|||
|
######################################################################################################### < HERE < HERE < HERE < HERE <
|
|||
|
# <<<<<<<<<<<<<<<<<<<<<<<<<< the operational portion of boombox is below >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> # < HERE < HERE < HERE < HERE <
|
|||
|
######################################################################################################### < HERE < HERE < HERE < HERE <
|
|||
|
@irc3.plugin
|
|||
|
class Plugin:
|
|||
|
#####################################################################################################
|
|||
|
def __init__(self, bot):
|
|||
|
#################################################################################################
|
|||
|
self.bot=bot
|
|||
|
self.bot.bbc=BOOMBOX_COLORS(self.bot)
|
|||
|
self.bot.bbs=BOOMBOX_STATS(self.bot)
|
|||
|
self.bot.bbs.bot=self.bot
|
|||
|
self.bot.bbs.kungfu=False
|
|||
|
bbs_token=self.bot.db.getlist("bbs_token")
|
|||
|
try:
|
|||
|
test=len(bbs_token[0])
|
|||
|
except:
|
|||
|
self.bot.bbs.diagnostics(1)
|
|||
|
#####################################################################################################
|
|||
|
@command(permission='view',public=True, show_in_help_list=False)
|
|||
|
def bb(self, mask, target, args):
|
|||
|
"""Convert boombox token to a url
|
|||
|
%%bb <token>...
|
|||
|
"""
|
|||
|
c=self.bot.bbc.palette()
|
|||
|
self.bot.bbc.c=c
|
|||
|
token=''.join(args['<token>'])
|
|||
|
tokens=self.bot.db.getlist("bbs_token")
|
|||
|
url=''
|
|||
|
for t in tokens:
|
|||
|
if token in t:
|
|||
|
url=t[token]
|
|||
|
msg=f"{c[0]}{mask.nick}{c[1]}: {c[2]}boombox{c[1]}->"
|
|||
|
if url:
|
|||
|
msg+=f"{c[2]}url{c[1]}: {c[3]}{url}"
|
|||
|
else:
|
|||
|
msg+=f"{c[2]}error{c[1]}: {c[3]}{token} is an invalid token"
|
|||
|
self.bot.privmsg(target,self.bot.emo(msg))
|
|||
|
#####################################################################################################
|
|||
|
@command(permission='view')
|
|||
|
def boombox(self, mask, target, args):
|
|||
|
"""boombox - usage: ?boombox top, ?boombox last, ?boombox user, ?boombox site, ?boombox all
|
|||
|
%%boombox <command>...
|
|||
|
"""
|
|||
|
command=' '.join(args['<command>']).lower()
|
|||
|
########################################################################### KUNGFU KUNGFU KUNGFU
|
|||
|
if command=='kungfu':
|
|||
|
self.bot.bbs.kungfu=not self.bot.bbs.kungfu
|
|||
|
self.bot.privmsg(target,self.bot.emo(f"kungfu: {self.bot.bbs.kungfu}"))
|
|||
|
###########################################################################
|
|||
|
commands=['top','last','user','site','all']
|
|||
|
###########################################################################
|
|||
|
if not command in commands:
|
|||
|
msg="boombox - usage: ?boombox top, ?boombox last, ?boombox user, ?boombox site, ?boombox all"
|
|||
|
self.bot.privmsg(target,self.bot.emo(msg))
|
|||
|
return
|
|||
|
###########################################################################
|
|||
|
bbs_last=self.bot.db.getlist("bbs_last")
|
|||
|
bbs_data=self.bot.db.getlist('bbs_data')
|
|||
|
###########################################################################
|
|||
|
try:
|
|||
|
if bbs_data:
|
|||
|
#########################################################################################
|
|||
|
c1,c2,c3,c4,c5,c6,c7,c8=self.bot.bbc.c
|
|||
|
#########################################################################################
|
|||
|
if command=='all':
|
|||
|
for _ in MOTD.splitlines():
|
|||
|
if _:
|
|||
|
self.bot.privmsg(target,f'{self.bot.bbc.palette()[0]}{_}')
|
|||
|
#########################################################################################
|
|||
|
if command=='top' or command=='all':
|
|||
|
msg=f'{c2}◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸ {c2}◅ {c1}TOP SONGS {c2}▻'
|
|||
|
self.bot.privmsg(target,msg)
|
|||
|
bbs_data=self.bot.db.getlist('bbs_data')
|
|||
|
hits=[]
|
|||
|
for i,data in enumerate(bbs_data):
|
|||
|
hits.append(data['hits'])
|
|||
|
lot=[(k,v) for k, v in zip(range(len(hits)),hits)]
|
|||
|
nl=[]
|
|||
|
while len(lot)> 0:
|
|||
|
nl.append(max(lot,key=lambda x: x[1]))
|
|||
|
lot.remove(nl[-1])
|
|||
|
nl[0:10]
|
|||
|
for i in range(len(bbs_data)):
|
|||
|
base=bbs_data[nl[0:10][i][0]]
|
|||
|
title=base['title']
|
|||
|
url=base['url']
|
|||
|
token=self.bot.bbs.dbiterate('bbs_tokenmirror',url)
|
|||
|
hits=base['hits']
|
|||
|
lot_nicks=[(k,v) for k, v in zip(range(len(base['nicks'].values())),base['nicks'].values())]
|
|||
|
buf_nicks=[]
|
|||
|
while len(lot_nicks)>0:
|
|||
|
buf_nicks.append(max(lot_nicks,key=lambda x: x[1]))
|
|||
|
lot_nicks.remove(buf_nicks[-1])
|
|||
|
nick_hits=buf_nicks[0][1]
|
|||
|
nick=list(base['nicks'])[buf_nicks[0][0]]
|
|||
|
msg=f'{c2}{str(i+1).zfill(2)}{c1} ◊ {c4}{self.bot.bbc.tailor(title.lower(),50)}{c1} {self.bot.bbs.b2}{c1}╏\x0F{self.bot.bbs.b4} ?bb {token}{c2}{self.bot.bbs.b2} {c1} ╏{c3}{hits}\x0F {self.bot.bbs.b4}plays total{c1} ╏ {c3}{nick_hits}\x0F {self.bot.bbs.b4}mostly by {c3}{nick}'
|
|||
|
self.bot.privmsg(target,msg)
|
|||
|
#########################################################################################
|
|||
|
if command=='last' or command=='all':
|
|||
|
msg=f'{c2}◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸ {c2}◅ {c1}LAST SONGS {c2}▻'
|
|||
|
self.bot.privmsg(target,msg)
|
|||
|
try:
|
|||
|
count=0
|
|||
|
for i,last_url in enumerate(bbs_last):
|
|||
|
if len(last_url)>0:
|
|||
|
count+=1
|
|||
|
msg=f'{c2}{str(i+1).zfill(2)} {c1}◊ {c3}{last_url[0]} {c1}{last_url[1]} {c4}{last_url[2]} {c1}{last_url[3]} {self.bot.bbs.b4}{last_url[4]}'
|
|||
|
self.bot.privmsg(target, msg)
|
|||
|
if count==0:
|
|||
|
msg=f'{c2}{str("01")}{c1} ◊ {c3}{str("https://ansibomb.com")}'
|
|||
|
self.bot.privmsg(target, msg)
|
|||
|
except Exception as e:
|
|||
|
msg=f'boombox/error: error in last 10 songs data parsing: {e}'
|
|||
|
self.bot.privmsg(target,msg)
|
|||
|
#########################################################################################
|
|||
|
if command=='user' or command=='all':
|
|||
|
msg=f'{c2}◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸ {c2}◅ {c1}TOP USERS {c2}▻'
|
|||
|
self.bot.privmsg(target,msg)
|
|||
|
bbs_nicks=self.bot.db.getlist("bbs_nicks")
|
|||
|
nick_hits=[]
|
|||
|
try:
|
|||
|
for i, data in enumerate(bbs_nicks[0].values()):
|
|||
|
nick_hits.append(data)
|
|||
|
lot_nicks=[(k,v) for k, v in zip(range(len(nick_hits)),nick_hits)]
|
|||
|
buf_nicks=[]
|
|||
|
while len(lot_nicks)>0:
|
|||
|
buf_nicks.append(max(lot_nicks,key=lambda x: x[1]))
|
|||
|
lot_nicks.remove(buf_nicks[-1])
|
|||
|
for i, index in enumerate(buf_nicks):
|
|||
|
nick=list(bbs_nicks[0])[index[0]]
|
|||
|
hits=bbs_nicks[0][nick]
|
|||
|
nick_top_hits=[]
|
|||
|
for data in bbs_data:
|
|||
|
try:
|
|||
|
nick_top_hits.append(data['nicks'][nick])
|
|||
|
except:
|
|||
|
nick_top_hits.append(0)
|
|||
|
lot_nicks=[(k,v) for k, v in zip(range(len(nick_top_hits)),nick_top_hits)]
|
|||
|
_buf_nicks=[]
|
|||
|
while len(lot_nicks)> 0:
|
|||
|
_buf_nicks.append(max(lot_nicks,key=lambda x: x[1]))
|
|||
|
lot_nicks.remove(_buf_nicks[-1])
|
|||
|
song_hits=_buf_nicks[0][1]
|
|||
|
index=_buf_nicks[0][0]
|
|||
|
title=bbs_data[index]['title']
|
|||
|
url=bbs_data[index]['url']
|
|||
|
token=self.bot.bbs.dbiterate('bbs_tokenmirror',url)
|
|||
|
msg=f'{c2}{str(i+1).zfill(2)}{c1} ◊ {c3}{self.bot.bbc.tailor(nick.lower(),10)}{c1} ╏ {c4}{self.bot.bbc.tailor(title.lower(),49)}{c1} {c1}╏ {c3}{hits}\x0F {self.bot.bbs.b4}total plays{c1} ╏\x0F{self.bot.bbs.b4} ?bb {token}{c1} {c1}╏\x0F {self.bot.bbs.b4}played {c3}{song_hits}\x0F {self.bot.bbs.b4}times'
|
|||
|
self.bot.privmsg(target,msg)
|
|||
|
except TypeError:
|
|||
|
msg=f'{c2}{str("01")}{c1} ◊ {c3}{str("blank")}{c1} ╏ {c4}{str("need music data")} {c1}╏ {c4}{str("0")}\x0F {c3}total plays {self.bot.bbs.b2}╏ \x0F{self.bot.bbs.b4}?bb 13666{c1} {c1}╏\x0F {self.bot.bbs.b4}played {c3}{str("0")}\x0F {self.bot.bbs.b4}times'
|
|||
|
self.bot.privmsg(target,msg)
|
|||
|
#########################################################################################
|
|||
|
if command=='site' or command=='all':
|
|||
|
bbs_sites=self.bot.db.getlist("bbs_sites")
|
|||
|
msg=f'{c2}◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸◹◸ {c2}◅ {c1}TOP SITES {c2}▻'
|
|||
|
self.bot.privmsg(target,msg)
|
|||
|
lot=[(k,v) for k, v in bbs_sites[0].items()]
|
|||
|
nl=[]
|
|||
|
while len(lot)>0:
|
|||
|
nl.append(max(lot,key=lambda x: x[1]))
|
|||
|
lot.remove(nl[-1])
|
|||
|
nl[0:4]
|
|||
|
bandcamp=[]
|
|||
|
spotify=[]
|
|||
|
youtube=[]
|
|||
|
soundcloud=[]
|
|||
|
for i,data in enumerate(bbs_data):
|
|||
|
print(i)
|
|||
|
if not data['url'].find('soundcloud')==-1:
|
|||
|
soundcloud.append(bbs_data[i]['hits'])
|
|||
|
bandcamp.append(0)
|
|||
|
youtube.append(0)
|
|||
|
spotify.append(0)
|
|||
|
print(f"\tsoundcloud {bbs_data[i]['hits']} - {bbs_data[i]['title']}")
|
|||
|
elif not data['url'].find('youtu.be')==-1:
|
|||
|
youtube.append(bbs_data[i]['hits'])
|
|||
|
soundcloud.append(0)
|
|||
|
bandcamp.append(0)
|
|||
|
spotify.append(0)
|
|||
|
print(f"\tyoutube {bbs_data[i]['hits']} - {bbs_data[i]['title']}")
|
|||
|
elif not data['url'].find('spotify')==-1:
|
|||
|
spotify.append(bbs_data[i]['hits'])
|
|||
|
soundcloud.append(0)
|
|||
|
youtube.append(0)
|
|||
|
bandcamp.append(0)
|
|||
|
print(f"\tspotify {bbs_data[i]['hits']} - {bbs_data[i]['title']}")
|
|||
|
elif not data['url'].find('bandcamp')==-1:
|
|||
|
bandcamp.append(bbs_data[i]['hits'])
|
|||
|
soundcloud.append(0)
|
|||
|
youtube.append(0)
|
|||
|
spotify.append(0)
|
|||
|
print(f"\tbandcamp {bbs_data[i]['hits']} - {bbs_data[i]['title']}")
|
|||
|
try:
|
|||
|
if max(bandcamp)==0: raise Exception
|
|||
|
bandcamp_title=bbs_data[bandcamp.index(max(bandcamp))]['title']
|
|||
|
bandcamp_url=bbs_data[bandcamp.index(max(bandcamp))]['url']
|
|||
|
bandcamp_hits=bbs_data[bandcamp.index(max(bandcamp))]['hits']
|
|||
|
except:
|
|||
|
bandcamp_title='no data yet'
|
|||
|
bandcamp_url='no url yet'
|
|||
|
try:
|
|||
|
if max(spotify)==0: raise Exception
|
|||
|
spotify_title=bbs_data[spotify.index(max(spotify))]['title']
|
|||
|
spotify_url=bbs_data[spotify.index(max(spotify))]['url']
|
|||
|
spotify_hits=bbs_data[spotify.index(max(spotify))]['hits']
|
|||
|
except:
|
|||
|
spotify_title='no data yet'
|
|||
|
spotify_url='no url yet'
|
|||
|
try:
|
|||
|
if max(youtube)==0: raise Exception
|
|||
|
youtube_title=bbs_data[youtube.index(max(youtube))]['title']
|
|||
|
youtube_url=bbs_data[youtube.index(max(youtube))]['url']
|
|||
|
youtube_hits=bbs_data[youtube.index(max(youtube))]['hits']
|
|||
|
except:
|
|||
|
youtube_title='no data yet'
|
|||
|
youtube_url='no url yet'
|
|||
|
try:
|
|||
|
if max(soundcloud)==0: raise Exception
|
|||
|
soundcloud_title=bbs_data[soundcloud.index(max(soundcloud))]['title']
|
|||
|
soundcloud_url=bbs_data[soundcloud.index(max(soundcloud))]['url']
|
|||
|
soundcloud_hits=bbs_data[soundcloud.index(max(soundcloud))]['hits']
|
|||
|
except:
|
|||
|
soundcloud_title='no data yet'
|
|||
|
soundcloud_url='no url yet'
|
|||
|
for i,data in enumerate(nl[0:4]):
|
|||
|
msg=f'{c2}{str(i+1).zfill(2)}{c1} ◊ {c3}{self.bot.bbc.tailor(data[0],10)}{c1} ╏ '
|
|||
|
if data[0]=='bandcamp':
|
|||
|
token=self.bot.bbs.dbiterate('bbs_tokenmirror',bandcamp_url)
|
|||
|
msg=msg+f'{c4}{self.bot.bbc.tailor(bandcamp_title.lower(),49)} {c1}╏ {c3}{data[1]} {self.bot.bbs.b4}total plays{c1} ╏ {self.bot.bbs.b4}?bb {token}'
|
|||
|
if not data[1]==0:
|
|||
|
msg=msg+f'{c1} ╏ {self.bot.bbs.b4}top {c3}{spotify_hits} {self.bot.bbs.b4}plays'
|
|||
|
elif data[0]=='spotify':
|
|||
|
token=self.bot.bbs.dbiterate('bbs_tokenmirror',spotify_url)
|
|||
|
msg=msg+f'{c4}{self.bot.bbc.tailor(spotify_title.lower(),49)} {c1}╏ {c3}{data[1]} {self.bot.bbs.b4}total plays{c1} ╏ {self.bot.bbs.b4}?bb {token}'
|
|||
|
if not data[1]==0:
|
|||
|
msg=msg+f'{c1} ╏ {self.bot.bbs.b4}top {c3}{spotify_hits} {self.bot.bbs.b4}plays'
|
|||
|
elif data[0]=='youtube':
|
|||
|
token=self.bot.bbs.dbiterate('bbs_tokenmirror',youtube_url)
|
|||
|
msg=msg+f'{c4}{self.bot.bbc.tailor(youtube_title.lower(),49)} {c1}╏ {c3}{data[1]} {self.bot.bbs.b4}total plays{c1} ╏ {self.bot.bbs.b4}?bb {token}'
|
|||
|
if not data[1]==0:
|
|||
|
msg=msg+f'{c1} ╏ {self.bot.bbs.b4}top {c3}{youtube_hits} {self.bot.bbs.b4}plays'
|
|||
|
elif data[0]=='soundcloud':
|
|||
|
token=self.bot.bbs.dbiterate('bbs_tokenmirror',soundcloud_url)
|
|||
|
msg=msg+f'{c4}{self.bot.bbc.tailor(soundcloud_title.lower(),49)} {c1}╏ {c3}{data[1]} {self.bot.bbs.b4}total plays{c1} ╏ {self.bot.bbs.b4}?bb {token}'
|
|||
|
if not data[1]==0:
|
|||
|
msg=msg+f'{c1} ╏ {self.bot.bbs.b4}top {c3}{soundcloud_hits} {self.bot.bbs.b4}plays'
|
|||
|
self.bot.privmsg(target,msg)
|
|||
|
except:
|
|||
|
msg="no music data for boombox yet"
|
|||
|
self.bot.privmsg(target,msg)
|
|||
|
##################################################################################################### EOF
|