mirror of
https://github.com/RYGhub/royalnet.git
synced 2024-11-27 13:34:28 +00:00
Add Discord Activity
This commit is contained in:
parent
601281fe33
commit
a6bae4b91b
5 changed files with 139 additions and 25 deletions
16
db.py
16
db.py
|
@ -967,6 +967,22 @@ class Halloween(Base):
|
||||||
completed[i] = True
|
completed[i] = True
|
||||||
return started, completed
|
return started, completed
|
||||||
|
|
||||||
|
|
||||||
|
class ActivityReport(Base):
|
||||||
|
__tablename__ = "activityreports"
|
||||||
|
|
||||||
|
timestamp = Column(DateTime, primary_key=True)
|
||||||
|
|
||||||
|
discord_members_online = Column(Integer)
|
||||||
|
discord_members_ingame = Column(Integer)
|
||||||
|
discord_cv = Column(Integer)
|
||||||
|
discord_members_cv = Column(Integer)
|
||||||
|
discord_channels_used = Column(Integer)
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
return f"<ActivityReport at {self.timestamp.isoformat()}>"
|
||||||
|
|
||||||
|
|
||||||
# If run as script, create all the tables in the db
|
# If run as script, create all the tables in the db
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
print("Creating new tables...")
|
print("Creating new tables...")
|
||||||
|
|
|
@ -336,6 +336,7 @@ class RoyalDiscordBot(discord.Client):
|
||||||
asyncio.ensure_future(self.queue_predownload_videos())
|
asyncio.ensure_future(self.queue_predownload_videos())
|
||||||
asyncio.ensure_future(self.queue_play_next_video())
|
asyncio.ensure_future(self.queue_play_next_video())
|
||||||
asyncio.ensure_future(self.inactivity_countdown())
|
asyncio.ensure_future(self.inactivity_countdown())
|
||||||
|
asyncio.ensure_future(self.activity_task())
|
||||||
|
|
||||||
async def on_ready(self):
|
async def on_ready(self):
|
||||||
# Get the main channel
|
# Get the main channel
|
||||||
|
@ -597,6 +598,48 @@ class RoyalDiscordBot(discord.Client):
|
||||||
await self.change_presence(status=discord.Status.online, activity=None)
|
await self.change_presence(status=discord.Status.online, activity=None)
|
||||||
await self.main_channel.send("💤 Mi sono disconnesso dalla cv per inattività.")
|
await self.main_channel.send("💤 Mi sono disconnesso dalla cv per inattività.")
|
||||||
|
|
||||||
|
async def create_activityreport(self):
|
||||||
|
logger.debug("Fetching Discord users...")
|
||||||
|
discord_users = list(self.main_guild.members)
|
||||||
|
online_members_count = 0
|
||||||
|
ingame_members_count = 0
|
||||||
|
cv_count = 0
|
||||||
|
cv_members_count = 0
|
||||||
|
non_empty_channels = []
|
||||||
|
for member in discord_users:
|
||||||
|
if member.bot:
|
||||||
|
continue
|
||||||
|
if member.voice is not None:
|
||||||
|
cv_count += 1
|
||||||
|
if member.voice.channel.id not in non_empty_channels:
|
||||||
|
non_empty_channels.append(member.voice.channel.id)
|
||||||
|
if len(member.roles) >= 2:
|
||||||
|
if member.voice is not None:
|
||||||
|
cv_members_count += 1
|
||||||
|
if member.status != discord.Status.offline and member.status != discord.Status.idle:
|
||||||
|
online_members_count += 1
|
||||||
|
if member.activity is not None and member.activity.type == discord.ActivityType.playing:
|
||||||
|
ingame_members_count += 1
|
||||||
|
logger.debug("Creating and committing db.ActivityReport...")
|
||||||
|
session = db.Session()
|
||||||
|
activityreport = db.ActivityReport(timestamp=datetime.datetime.now(),
|
||||||
|
discord_members_online=online_members_count,
|
||||||
|
discord_members_ingame=ingame_members_count,
|
||||||
|
discord_cv=cv_count,
|
||||||
|
discord_members_cv=cv_members_count,
|
||||||
|
discord_channels_used=len(non_empty_channels))
|
||||||
|
session.add(activityreport)
|
||||||
|
await loop.run_in_executor(executor, session.commit)
|
||||||
|
await loop.run_in_executor(executor, session.close)
|
||||||
|
logger.info("ActivityReport created.")
|
||||||
|
|
||||||
|
async def activity_task(self):
|
||||||
|
time_to_wait = config["Discord"]["activityreport_sample_time"]
|
||||||
|
while True:
|
||||||
|
await self.create_activityreport()
|
||||||
|
logger.debug(f"Waiting {time_to_wait} seconds before the next record.")
|
||||||
|
await asyncio.sleep(time_to_wait)
|
||||||
|
|
||||||
async def add_video_from_url(self, url, index: typing.Optional[int] = None, enqueuer: discord.Member = None):
|
async def add_video_from_url(self, url, index: typing.Optional[int] = None, enqueuer: discord.Member = None):
|
||||||
# Retrieve info
|
# Retrieve info
|
||||||
logger.debug(f"Retrieving info for {url}.")
|
logger.debug(f"Retrieving info for {url}.")
|
||||||
|
|
64
templates/activity.html
Normal file
64
templates/activity.html
Normal file
|
@ -0,0 +1,64 @@
|
||||||
|
{% extends 'base.html' %}
|
||||||
|
|
||||||
|
{% block prehead %}
|
||||||
|
<meta name="description" content="Statistiche sull'attività della Royal Games">
|
||||||
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.3/Chart.bundle.js" integrity="sha384-DhLzB4p1BEBSNugP/gw0UBLxHx7kHgldDGYtGinCssfp4HK+sG4ByZDau4pWmpqG" crossorigin="anonymous"></script>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block pagetitle %}
|
||||||
|
{{ game_name }}
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block body %}
|
||||||
|
<div class="discord-activity">
|
||||||
|
<h1>
|
||||||
|
Attività su Discord
|
||||||
|
</h1>
|
||||||
|
<canvas class="members-graph-7d" id="discord-members-graph-7d"></canvas>
|
||||||
|
<script>
|
||||||
|
new Chart("discord-members-graph-7d",
|
||||||
|
{
|
||||||
|
"type": "line",
|
||||||
|
"data": {
|
||||||
|
"labels": [
|
||||||
|
{% for point in activityreports %}
|
||||||
|
{{ point.timestamp.strftime("%a %H:%M") }}
|
||||||
|
{% endfor %}
|
||||||
|
],
|
||||||
|
"datasets": [
|
||||||
|
{
|
||||||
|
"label": "Online",
|
||||||
|
"borderColor": "#6dcff6",
|
||||||
|
"data": [
|
||||||
|
{% for point in activityreports %}
|
||||||
|
{{ point.discord_members_online }},
|
||||||
|
{% endfor %}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "In game",
|
||||||
|
"borderColor": "#9ae915",
|
||||||
|
"data": [
|
||||||
|
{% for point in activityreports %}
|
||||||
|
{{ point.discord_members_ingame }},
|
||||||
|
{% endfor %}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "In cv",
|
||||||
|
"borderColor": "#fe7f00",
|
||||||
|
"data": [
|
||||||
|
{% for point in activityreports %}
|
||||||
|
{{ point.discord_members_cv }},
|
||||||
|
{% endfor %}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"options":{
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
|
@ -17,14 +17,6 @@
|
||||||
<img src="{{ url_for('static', filename='FixMeRYGLogo.jpg') }}" class="ryg-logo">
|
<img src="{{ url_for('static', filename='FixMeRYGLogo.jpg') }}" class="ryg-logo">
|
||||||
<b>Royalnet</b>
|
<b>Royalnet</b>
|
||||||
<a href="/">Home</a>
|
<a href="/">Home</a>
|
||||||
<span class="desktop-only">
|
|
||||||
{% if session.get('username') is not none %}
|
|
||||||
<a href="{{ g.rygconf['Telegram']['invite_link'] }}">Telegram</a>
|
|
||||||
<a href="{{ g.rygconf['Discord']['invite_link'] }}">Discord</a>
|
|
||||||
<a href="https://steamcommunity.com/groups/royalgamescastle">Steam</a>
|
|
||||||
<a href="https://new.reddit.com/r/RoyalGames/">/r/RoyalGames</a>
|
|
||||||
{% endif %}
|
|
||||||
</span>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="right">
|
<div class="right">
|
||||||
{% if config["DEBUG"] %}
|
{% if config["DEBUG"] %}
|
||||||
|
|
|
@ -8,21 +8,6 @@
|
||||||
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
|
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block posthead %}
|
|
||||||
<script>
|
|
||||||
function timer() {
|
|
||||||
let now = new Date().getTime();
|
|
||||||
let to = new Date("Oct 31, 2018 15:30:00").getTime();
|
|
||||||
let result = to - now;
|
|
||||||
document.getElementById("time-left").innerHTML = Math.floor(String((result / 3600000))) + "h "
|
|
||||||
+ Math.floor(String((result / 60000) % 60)) + "m "
|
|
||||||
+ Math.floor(String((result / 1000) % 60)) + "s";
|
|
||||||
}
|
|
||||||
|
|
||||||
setInterval(timer, 100);
|
|
||||||
</script>
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block body %}
|
{% block body %}
|
||||||
<h1 id="main-title">
|
<h1 id="main-title">
|
||||||
Royal Games
|
Royal Games
|
||||||
|
@ -49,9 +34,24 @@
|
||||||
<a href="/diario">Visualizza tutto</a>
|
<a href="/diario">Visualizza tutto</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="right">
|
<div class="right">
|
||||||
|
<div class="box">
|
||||||
|
<div class="upper-box">
|
||||||
|
Link utili
|
||||||
|
</div>
|
||||||
|
<div class="lower-box">
|
||||||
|
<ul>
|
||||||
|
<li><a href="{{ g.rygconf['Telegram']['invite_link'] }}">Link di unione a Telegram</a></li>
|
||||||
|
<li><a href="{{ g.rygconf['Discord']['invite_link'] }}">Link di invito a Discord</a></li>
|
||||||
|
<li><a href="https://steamcommunity.com/groups/royalgamescastle">Gruppo Steam Community</a></li>
|
||||||
|
<li><a href="https://new.reddit.com/r/RoyalGames/">/r/RoyalGames</a></li>
|
||||||
|
<li><a href="/music">Statistiche su Royal Music</a></li>
|
||||||
|
<li><a href="http://amazon.steffo.eu/royal-music-cache/">File in cache di Royal Music</a></li>
|
||||||
|
<li><a href="/activity">Statistiche sull'attività</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div class="box">
|
<div class="box">
|
||||||
<div class="upper-box">
|
<div class="upper-box">
|
||||||
Membri
|
Membri
|
||||||
|
@ -76,7 +76,6 @@
|
||||||
<li><a href="/game/discord">Discord</a></li>
|
<li><a href="/game/discord">Discord</a></li>
|
||||||
<li><a href="/game/steam">Steam</a></li>
|
<li><a href="/game/steam">Steam</a></li>
|
||||||
<li><a href="/game/dota">Dota 2</a></li>
|
<li><a href="/game/dota">Dota 2</a></li>
|
||||||
<!--li><a href="/game/rl">Rocket League</a></li-->
|
|
||||||
<li><a href="/game/lol">League of Legends</a></li>
|
<li><a href="/game/lol">League of Legends</a></li>
|
||||||
<li><a href="/game/ow">Overwatch</a></li>
|
<li><a href="/game/ow">Overwatch</a></li>
|
||||||
<li><a href="/game/osu">osu!</a></li>
|
<li><a href="/game/osu">osu!</a></li>
|
||||||
|
|
Loading…
Reference in a new issue