79 lines
2.9 KiB
Python
79 lines
2.9 KiB
Python
import datetime
|
|
import json
|
|
import os
|
|
|
|
import pytz
|
|
|
|
|
|
async def import_old_database(bot, server):
|
|
"""try to import the old database"""
|
|
try:
|
|
clean_server = str(server).replace("/", "")
|
|
while clean_server.startswith("."):
|
|
clean_server = clean_server[1:]
|
|
fn = 'backup/' + clean_server + '.json'
|
|
with open(fn, 'r') as infile:
|
|
polls = json.load(infile)
|
|
for p in polls:
|
|
#print(polls[p]['short'])
|
|
wr = []
|
|
wn = []
|
|
for r, n in polls[p]['weights'].items():
|
|
wr.append(r)
|
|
try:
|
|
if n.is_integer():
|
|
n = int(n)
|
|
except:
|
|
pass
|
|
wn.append(n)
|
|
created = datetime.datetime.strptime(polls[p]['datestarted'], '%d-%m-%Y %H:%M').replace(tzinfo=pytz.utc)
|
|
if polls[p]['duration'] == 0:
|
|
duration = 0
|
|
else:
|
|
duration = created + datetime.timedelta(hours=float(polls[p]['duration']))
|
|
votes = {}
|
|
for u,o in polls[p]['votes'].items():
|
|
# get weight
|
|
user = server.get_member(u)
|
|
weight = 1
|
|
if wr.__len__() > 0:
|
|
valid_weights = [wn[wr.index(r)] for r in
|
|
list(set([n.name for n in user.roles]).intersection(set(wr)))]
|
|
if valid_weights.__len__() > 0:
|
|
#print(wr, wn)
|
|
weight = max(valid_weights)
|
|
choices = []
|
|
if o in polls[p]['options']:
|
|
choices = [polls[p]['options'].index(o)]
|
|
votes[u] = {'weight': weight, 'choices': choices}
|
|
|
|
new_format = {
|
|
'server_id': str(server.id),
|
|
'channel_id': str(polls[p]['channel']),
|
|
'author': str(polls[p]['author']),
|
|
'name': polls[p]['name'],
|
|
'short': polls[p]['short'],
|
|
'anonymous': polls[p]['anonymous'],
|
|
'reaction': True,
|
|
'multiple_choice': False,
|
|
'options_reaction': polls[p]['options'],
|
|
'reaction_default': False,
|
|
'roles': polls[p]['roles'],
|
|
'weights_roles': wr,
|
|
'weights_numbers': wn,
|
|
'duration': duration,
|
|
'duration_tz': 'UTC',
|
|
'time_created': created,
|
|
'open': polls[p]['open'],
|
|
'active': True,
|
|
'activation': 0,
|
|
'activation_tz': 'UTC',
|
|
'votes': votes
|
|
}
|
|
await bot.db.polls.update_one({'server_id': str(server.id), 'short': polls[p]['short']},
|
|
{'$set': new_format}, upsert=True)
|
|
#os.remove(fn)
|
|
except FileNotFoundError:
|
|
pass
|
|
except Exception as e:
|
|
print(e) |