-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathserverData.py
More file actions
145 lines (127 loc) · 5.65 KB
/
serverData.py
File metadata and controls
145 lines (127 loc) · 5.65 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
import discord
import time
import os
def formPairs(items):
pairs = []
for x in range(len(items)):
for y in range(x+1, len(items)):
pairs.append((items[x], items[y]))
return pairs
class serverData:
def __init__(self, memberList):
self.friendshipData = {}
self.messageHistory = []
self.guild = memberList[0].guild
self.lastSaveTime = time.time()
self.commandPrefix = '/'
memberListNoBots = []
for member in memberList:
if not member.bot:
memberListNoBots.append(member)
memberPairs = formPairs(memberListNoBots)
for pair in memberPairs:
self.friendshipData[pair] = [0, 0]
async def saidSomething(self, member, channel):
self.messageHistory.append((member, time.time(), channel.id))
while True:
removed = False
for messageTime in self.messageHistory:
if time.time() - messageTime[1] > 30:
self.messageHistory.remove(messageTime)
removed = True
break
if not removed:
break
for prevMember in self.messageHistory:
if prevMember[2] != channel.id:
continue
prevMember = prevMember[0]
if (member, prevMember) in self.friendshipData.keys():
pair = (member, prevMember)
self.friendshipData[pair][1] += 1
if self.friendshipData[pair][1] > self.friendshipData[pair][0] * 25 + 50:
self.friendshipData[pair][1] -= (self.friendshipData[pair][0] * 25 + 50)
self.friendshipData[pair][0] += 1
await self.sendLevelUp(member, prevMember, channel, self.friendshipData[pair][0])
elif (prevMember, member) in self.friendshipData.keys():
pair = (prevMember, member)
self.friendshipData[pair][1] += 1
if self.friendshipData[pair][1] > self.friendshipData[pair][0] * 25 + 50:
self.friendshipData[pair][1] -= (self.friendshipData[pair][0] * 25 + 50)
self.friendshipData[pair][0] += 1
await self.sendLevelUp(member, prevMember, channel, self.friendshipData[pair][0])
if self.timeForSave():
self.saveFriends()
async def sendLevelUp(self, member1, member2, channel, level):
levelUpMessage = ""
levelUpMessage += member1.display_name
levelUpMessage += " and "
levelUpMessage += member2.display_name
levelUpMessage += " leveled up their friendship to level "
levelUpMessage += str(level)
levelUpMessage += '!'
await channel.send(levelUpMessage)
def listFriends(self, person):
toReturn = ""
for pair in self.friendshipData.keys():
if person in pair:
otherPerson = person
for x in pair:
if not x == person:
otherPerson = x
if self.friendshipData[pair][0] > 0:
toReturn += str(otherPerson.display_name)
toReturn += ": friendship level "
toReturn += str(self.friendshipData[pair][0])
toReturn += "\n"
return toReturn
def saveFriends(self):
try:
os.mkdir("fpdata")
print(os.getcwd())
except FileExistsError as e:
pass
os.chdir("fpdata")
saveFile = open(str(self.guild.id) + ".txt", 'w')
for ele in self.friendshipData:
saveFile.write(str(ele[0].id))
saveFile.write(',')
saveFile.write(str(ele[1].id))
saveFile.write(',')
saveFile.write(str(self.friendshipData[ele][0]))
saveFile.write(',')
saveFile.write(str(self.friendshipData[ele][1]))
saveFile.write('\n')
saveFile.write(self.commandPrefix)
saveFile.close()
os.chdir("..")
def loadFriends(self):
try:
os.chdir("fpdata")
loadFile = open(str(self.guild.id) + ".txt", 'r')
lines = loadFile.readlines()
loadFile.close()
for line in lines[:-1]:
if len(line) > 0:
parts = line.split(',')
for pair in self.friendshipData:
if pair[0].id == int(parts[0]) or pair[1].id == int(parts[0]):
if pair[0].id == int(parts[1]) or pair[1].id == int(parts[1]):
self.friendshipData[pair][0] = int(parts[2])
self.friendshipData[pair][1] = int(parts[3])
self.commandPrefix = lines[-1]
except FileNotFoundError as e:
pass
if str(os.getcwd()).endswith("fpdata"):
os.chdir("..")
def timeForSave(self):
return time.time() - self.lastSaveTime > 300
async def displayFP(self, member1, member2, channel):
pair = None
if (member1, member2) in self.friendshipData:
pair = (member1, member2)
elif (member2, member1) in self.friendshipData:
pair = (member2, member1)
await channel.send(f"{member1.display_name} and {member2.display_name} are at friendship level {self.friendshipData[pair][0]} and have {self.friendshipData[pair][1]} fp out of {self.friendshipData[pair][0] * 25 + 50}")
def setCommandPrefix(self, newPrefix):
self.commandPrefix = newPrefix