mirror of
https://github.com/Cog-Creators/Red-DiscordBot.git
synced 2025-11-07 19:58:54 -05:00
[Streams] Added toggeable autodeletion of stream alerts
[p]streamset autodelete Enabled by default
This commit is contained in:
parent
f9d0abef92
commit
d52c9d57e7
@ -45,6 +45,7 @@ class Streams:
|
|||||||
self.beam_streams = dataIO.load_json("data/streams/beam.json")
|
self.beam_streams = dataIO.load_json("data/streams/beam.json")
|
||||||
settings = dataIO.load_json("data/streams/settings.json")
|
settings = dataIO.load_json("data/streams/settings.json")
|
||||||
self.settings = defaultdict(dict, settings)
|
self.settings = defaultdict(dict, settings)
|
||||||
|
self.messages_cache = defaultdict(list)
|
||||||
|
|
||||||
@commands.command()
|
@commands.command()
|
||||||
async def hitbox(self, stream: str):
|
async def hitbox(self, stream: str):
|
||||||
@ -270,6 +271,22 @@ class Streams:
|
|||||||
|
|
||||||
dataIO.save_json("data/streams/settings.json", self.settings)
|
dataIO.save_json("data/streams/settings.json", self.settings)
|
||||||
|
|
||||||
|
@streamset.command(pass_context=True)
|
||||||
|
@checks.admin()
|
||||||
|
async def autodelete(self, ctx):
|
||||||
|
"""Toggles automatic notification deletion for streams that go offline"""
|
||||||
|
server = ctx.message.server
|
||||||
|
settings = self.settings[server.id]
|
||||||
|
current = settings.get("AUTODELETE", True)
|
||||||
|
settings["AUTODELETE"] = not current
|
||||||
|
if settings["AUTODELETE"]:
|
||||||
|
await self.bot.say("Notifications will be automatically deleted "
|
||||||
|
"once the stream goes offline.")
|
||||||
|
else:
|
||||||
|
await self.bot.say("Notifications won't be deleted anymore.")
|
||||||
|
|
||||||
|
dataIO.save_json("data/streams/settings.json", self.settings)
|
||||||
|
|
||||||
async def hitbox_online(self, stream):
|
async def hitbox_online(self, stream):
|
||||||
url = "https://api.hitbox.tv/media/live/" + stream
|
url = "https://api.hitbox.tv/media/live/" + stream
|
||||||
|
|
||||||
@ -412,12 +429,14 @@ class Streams:
|
|||||||
|
|
||||||
for streams_list, parser in streams:
|
for streams_list, parser in streams:
|
||||||
for stream in streams_list:
|
for stream in streams_list:
|
||||||
|
key = (parser, stream["NAME"])
|
||||||
try:
|
try:
|
||||||
embed = await parser(stream["NAME"])
|
embed = await parser(stream["NAME"])
|
||||||
except OfflineStream:
|
except OfflineStream:
|
||||||
if stream["ALREADY_ONLINE"]:
|
if stream["ALREADY_ONLINE"]:
|
||||||
stream["ALREADY_ONLINE"] = False
|
stream["ALREADY_ONLINE"] = False
|
||||||
save = True
|
save = True
|
||||||
|
await self.delete_old_notifications(key)
|
||||||
except: # We don't want our task to die
|
except: # We don't want our task to die
|
||||||
continue
|
continue
|
||||||
else:
|
else:
|
||||||
@ -425,14 +444,18 @@ class Streams:
|
|||||||
continue
|
continue
|
||||||
save = True
|
save = True
|
||||||
stream["ALREADY_ONLINE"] = True
|
stream["ALREADY_ONLINE"] = True
|
||||||
|
messages_sent = []
|
||||||
for channel_id in stream["CHANNELS"]:
|
for channel_id in stream["CHANNELS"]:
|
||||||
channel = self.bot.get_channel(channel_id)
|
channel = self.bot.get_channel(channel_id)
|
||||||
if channel is None:
|
if channel is None:
|
||||||
continue
|
continue
|
||||||
mention = self.settings.get(channel.server.id, {}).get("MENTION", "")
|
mention = self.settings.get(channel.server.id, {}).get("MENTION", "")
|
||||||
can_speak = channel.permissions_for(channel.server.me).send_messages
|
can_speak = channel.permissions_for(channel.server.me).send_messages
|
||||||
|
message = mention + " {} is live!".format(stream["NAME"])
|
||||||
if channel and can_speak:
|
if channel and can_speak:
|
||||||
await self.bot.send_message(channel, mention, embed=embed)
|
m = await self.bot.send_message(channel, message, embed=embed)
|
||||||
|
messages_sent.append(m)
|
||||||
|
self.messages_cache[key] = messages_sent
|
||||||
|
|
||||||
await asyncio.sleep(0.5)
|
await asyncio.sleep(0.5)
|
||||||
|
|
||||||
@ -443,6 +466,19 @@ class Streams:
|
|||||||
|
|
||||||
await asyncio.sleep(CHECK_DELAY)
|
await asyncio.sleep(CHECK_DELAY)
|
||||||
|
|
||||||
|
async def delete_old_notifications(self, key):
|
||||||
|
for message in self.messages_cache[key]:
|
||||||
|
server = message.server
|
||||||
|
settings = self.settings.get(server.id, {})
|
||||||
|
is_enabled = settings.get("AUTODELETE", True)
|
||||||
|
try:
|
||||||
|
if is_enabled:
|
||||||
|
await self.bot.delete_message(message)
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
|
del self.messages_cache[key]
|
||||||
|
|
||||||
def rnd_attr(self):
|
def rnd_attr(self):
|
||||||
"""Avoids Discord's caching"""
|
"""Avoids Discord's caching"""
|
||||||
return "?rnd=" + "".join([choice(ascii_letters) for i in range(6)])
|
return "?rnd=" + "".join([choice(ascii_letters) for i in range(6)])
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user