-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathYeetGames.py
129 lines (106 loc) · 4.27 KB
/
YeetGames.py
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
import os
import discord
from discord.ext import commands
import operator
import asyncio
from .utils.dataIO import fileIO
from .utils import checks
default_settings = {"MsgID": None, "ChannelID": None}
freq = 90
class YeetPlays:
def __init__(self, bot):
self.bot = bot
self.settings = fileIO("data/YeetPlays/data.json", "load")
self.yeet = False
@commands.command(pass_context=True, no_pm=True)
@checks.mod_or_permissions(manage_channels=True)
async def yeetstart(self, ctx):
"""Starts YeetGames"""
await self.bot.say("The Yeet Machine has started yeeting")
if self.yeet is False:
self.yeet = True
await self.run()
@commands.command(pass_context=True, no_pm=True)
@checks.mod_or_permissions(manage_channels=True)
async def yeetgames(self, ctx):
"""Shows the currently most played games"""
user = ctx.message.author
message = ctx.message
msg = "Generating First Message \n this can take {} seconds.".format(freq)
first_em = discord.Embed(description=msg, colour=user.colour)
first_msg = await self.bot.say(embed=first_em)
if message.id not in self.settings:
self.settings[first_msg.id] = default_settings
self.settings[first_msg.id]["MsgID"] = first_msg.id
self.settings[first_msg.id]["ChannelID"] = first_msg.channel.id
fileIO("data/YeetPlays/data.json", "save", self.settings)
if self.yeet is False:
self.yeet = True
await self.run()
async def gamelist(self,message):
server = message.server
members = server.members
color = message.author.color
freq_list = {}
for member in members:
if not member:
continue
if not member.game or not member.game.name:
continue
if member.bot:
continue
if member.game.name not in freq_list:
freq_list[member.game.name] = 0
freq_list[member.game.name] += 1
sorted_list = sorted(freq_list.items(),
key=operator.itemgetter(1),
reverse=True)
if not freq_list:
em = discord.Embed(description="Surprisingly, no one is playing anything.", colour=color)
em.set_author(name="These are the server's most played games at the moment:")
return em
else:
# create display
msg = ""
max_games = min(len(sorted_list), 10)
for i in range(max_games):
game, freq = sorted_list[i]
msg += "▸ {}: __{}__\n".format(game, freq_list[game])
#print(game)
em = discord.Embed(description=msg, colour=color)
em.set_author(name="These are the server's most played games at the moment:")
return em
async def run(self):
while self.yeet is True:
f = fileIO("data/YeetPlays/data.json", "load")
for msg_id in f:
id = self.settings[msg_id]["MsgID"]
chan = self.settings[msg_id]["ChannelID"]
channel = self.bot.get_channel(chan)
message = await self.bot.get_message(channel, str(id))
output = await self.gamelist(message)
await self.bot.edit_message(message=message, embed=output)
await asyncio.sleep(freq)
def check_folders():
if not os.path.exists("data/YeetPlays"):
print("Creating data/YeetPlays folder...")
os.makedirs("data/YeetPlays")
def check_files():
f = "data/YeetPlays/data.json"
if not fileIO(f, "check"):
print("Creating YeetPlays data.json...")
fileIO(f, "save", {})
else: #consistency check
current = fileIO(f, "load")
for k,v in current.items():
if v.keys() != default_settings.keys():
for key in default_settings.keys():
if key not in v.keys():
current[k][key] = default_settings[key]
print("Adding " + str(key) + " field to YeetPlays data.json")
fileIO(f, "save", current)
def setup(bot):
check_folders()
check_files()
n = YeetPlays(bot)
bot.add_cog(n)