updates to the readme and flavor text for star citizen incidents
This commit is contained in:
parent
adcf6a4754
commit
dab39d3980
@ -1,4 +1,3 @@
|
||||
[](http://git.luker.fr/ldooks/dragon-bot/-/commits/master)
|
||||
# README #
|
||||
|
||||
A discord bot written in python.
|
||||
@ -11,9 +10,12 @@ Currently the CI/CD pipeline has workers running as Kubernetes pods and dispatch
|
||||
* This is a chat bot of sorts that connects to our [discord](https://discordapp.com/) channel and interacts with us via chat commands
|
||||
* This bot has also been an ongoing learning experience for several members of the discord channel. With this bot, I have been able to teach the repo contributors:
|
||||
* Docker
|
||||
* Helm
|
||||
* Kubernetes
|
||||
* ArgoCD
|
||||
* Git
|
||||
* Python
|
||||
* CI/CD
|
||||
* CI/CD (First using gitlab CI, but now I've deployed my own DroneCI cluster)
|
||||
* Collaborative coding practices
|
||||
* Testing methodologies
|
||||
* Code Accountability
|
||||
|
126
app/apex_legends.py
Executable file
126
app/apex_legends.py
Executable file
@ -0,0 +1,126 @@
|
||||
import datetime
|
||||
import discord
|
||||
import os
|
||||
import requests
|
||||
|
||||
|
||||
def get_player(player):
|
||||
# player = player.lower()
|
||||
# url = "https://public-api.tracker.gg/v2/apex/standard/profile/origin/" + player
|
||||
# headers = {
|
||||
# "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64)",
|
||||
# "accept": "application/json",
|
||||
# "TRN-Api-Key": os.getenv("tracker_network_token"),
|
||||
# }
|
||||
|
||||
url = (
|
||||
"https://api.mozambiquehe.re/bridge?auth=%s&player=%s&platform=PC&merge=True"
|
||||
% (
|
||||
os.getenv("apex_api_key"),
|
||||
player,
|
||||
)
|
||||
)
|
||||
# print(url)
|
||||
response = requests.get(url).json()
|
||||
|
||||
# Build the embed
|
||||
embed = discord.Embed(description="-------", color=discord.Color.red(), type="rich")
|
||||
embed.set_thumbnail(url=response["global"]["rank"]["rankImg"])
|
||||
embed.set_author(name="Apex stats for %s" % response["global"]["name"])
|
||||
embed.add_field(
|
||||
name="**Rank**",
|
||||
value="%s, %s"
|
||||
% (
|
||||
response["global"]["rank"]["rankName"],
|
||||
response["global"]["rank"]["rankScore"],
|
||||
),
|
||||
inline=False,
|
||||
)
|
||||
embed.add_field(
|
||||
name="**Current level**",
|
||||
value="%s, %s%% of the way to next level"
|
||||
% (
|
||||
response["global"]["level"],
|
||||
response["global"]["toNextLevelPercent"],
|
||||
),
|
||||
inline=False,
|
||||
)
|
||||
|
||||
gameplay_stats = {
|
||||
"kills": "Total kills",
|
||||
"kd": "K/D",
|
||||
"executions": "Executions",
|
||||
"revives": "Revies",
|
||||
"games_played": "Games Played",
|
||||
"headshots": "Headshots",
|
||||
}
|
||||
|
||||
embed.add_field(name="Totals", value="-------", inline=False)
|
||||
for stat, readable in gameplay_stats.items():
|
||||
embed.add_field(
|
||||
name="**%s**" % readable,
|
||||
value=response["total"][stat]["value"],
|
||||
inline=True,
|
||||
)
|
||||
|
||||
embed.add_field(
|
||||
name="Stats per legend", value="---------------------", inline=False
|
||||
)
|
||||
legends = response["legends"]["all"]
|
||||
for legend in legends:
|
||||
if "data" in response["legends"]["all"][legend] and legend != "Global":
|
||||
data = response["legends"]["all"][legend]["data"]
|
||||
smush = {x["key"]: x for x in data}
|
||||
|
||||
try:
|
||||
legends_kills = smush["specialEvent_kills"]["value"] or 0
|
||||
legends_damage = smush["specialEvent_damage"]["value"] or 0
|
||||
legends_wins = smush["specialEvent_wins"]["value"] or 0
|
||||
|
||||
embed.add_field(
|
||||
name=legend,
|
||||
value="Total kills: %s\nTotal Damage: %s\nTotal Wins: %s"
|
||||
% (legends_kills, legends_damage, legends_wins),
|
||||
)
|
||||
except Exception as e:
|
||||
print("%s threw an exception on %s" % (legend, e))
|
||||
pass
|
||||
|
||||
# best_weapon = find_best(response["weapons"], "kills")
|
||||
|
||||
# embed.add_field(
|
||||
# name=":trophy:**Best Weapon**:trophy:",
|
||||
# value="%s\nkills: %s\naccuracy: %s\nHeadshots: %s"
|
||||
# % (
|
||||
# best_weapon["weaponName"],
|
||||
# best_weapon["kills"],
|
||||
# best_weapon["accuracy"],
|
||||
# best_weapon["headshotKills"],
|
||||
# ),
|
||||
# inline=True,
|
||||
# )
|
||||
|
||||
# favorite_class = find_best(response["classes"], "secondsPlayed")
|
||||
|
||||
# embed.add_field(
|
||||
# name=":trophy:**Favorite Class**:trophy:",
|
||||
# value="%s\nKDR: %s\nTime Played: %s"
|
||||
# % (
|
||||
# favorite_class["characterName"],
|
||||
# favorite_class["killDeath"],
|
||||
# str(datetime.timedelta(seconds=favorite_class["secondsPlayed"])),
|
||||
# ),
|
||||
# inline=True,
|
||||
# )
|
||||
return embed
|
||||
|
||||
|
||||
def find_best(blob, key):
|
||||
"""
|
||||
find_best(blob, key)
|
||||
blob should be the list within the request you want to find the best of,
|
||||
must be one of [weapopns, vehicles, classes, gamemodes, maps, gadgets], eg. response["weapons"],
|
||||
and the key to use to make that distinction, for example, for weapons, you could use kills
|
||||
"""
|
||||
|
||||
return max(blob, key=lambda x: x[key])
|
@ -74,7 +74,9 @@ class AnimalFunctions(commands.Cog):
|
||||
await ctx.respond(animals.cowboy())
|
||||
|
||||
@commands.slash_command(
|
||||
guild_ids=None, name="dale", description="Posts a photo of the goodest boy"
|
||||
guild_ids=None,
|
||||
name="dale",
|
||||
description="Posts a photo of the goodest boy. Rest in power king",
|
||||
)
|
||||
async def dale(self, ctx: commands.Context):
|
||||
await ctx.defer()
|
||||
|
@ -6,22 +6,20 @@ class Games(commands.Cog):
|
||||
def __init__(self, bot):
|
||||
self.bot: commands.Bot = bot
|
||||
|
||||
# @commands.slash_command(
|
||||
# guild_ids=None,
|
||||
# name="bf5",
|
||||
# description="Query the game's API for data about a player",
|
||||
# )
|
||||
# async def bf5(self, ctx: commands.Context, player):
|
||||
# import bf5
|
||||
@commands.slash_command(
|
||||
guild_ids=None,
|
||||
name="apex",
|
||||
description="Query the game's API for data about a player",
|
||||
)
|
||||
async def apex(self, ctx: commands.Context, player):
|
||||
import apex_legends
|
||||
|
||||
# try:
|
||||
# await ctx.defer()
|
||||
# embed = bf5.get_player(player)
|
||||
# await ctx.send_followup(embed=embed)
|
||||
# except Exception as e:
|
||||
# await ctx.send(
|
||||
# "I encountered an error while searching for that player.\nPlease check that your player name is spelled correctly"
|
||||
# )
|
||||
try:
|
||||
await ctx.defer()
|
||||
embed = apex_legends.get_player(player)
|
||||
await ctx.send_followup(embed=embed)
|
||||
except Exception as e:
|
||||
await ctx.send(e)
|
||||
|
||||
@commands.slash_command(
|
||||
guild_ids=None,
|
||||
|
@ -154,7 +154,7 @@ class StarCitizen(commands.Cog):
|
||||
url="https://media.robertsspaceindustries.com/t0q21kbb3zrpt/source.png"
|
||||
)
|
||||
embed.set_author(
|
||||
name="🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨\n🚨 OH NO THERES AN INCIDENT 🚨\n🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨"
|
||||
name="🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨\n🚨 OH NO THERES AN INCIDENT 🚨\n🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨"
|
||||
)
|
||||
embed.set_image(
|
||||
url="https://media.giphy.com/media/WWIZJyXHXscn8JC1e0/giphy.gif"
|
||||
@ -168,6 +168,15 @@ class StarCitizen(commands.Cog):
|
||||
)
|
||||
|
||||
await self.bot.get_channel(1097567909640929340).send(embed=embed)
|
||||
# sent_embed = await self.bot.get_channel(932476007439552522).send(
|
||||
# embed=embed
|
||||
# )
|
||||
|
||||
# # If the devs update the content of the incident, update the embed with the new text
|
||||
# if details.text != sent_embed.embeds[0].fields[0].value:
|
||||
# sent_embed.embeds[0].set_field_at(
|
||||
# index=0, name="Details", value=details.text, inline=True
|
||||
# )
|
||||
|
||||
|
||||
def setup(bot):
|
||||
|
@ -1,7 +1,7 @@
|
||||
from diagrams import Cluster, Diagram, Edge
|
||||
from diagrams.onprem.gitops import Argocd
|
||||
from diagrams.onprem.vcs import Gitlab
|
||||
from diagrams.onprem.ci import Gitlabci
|
||||
from diagrams.onprem.vcs import Gitea
|
||||
from diagrams.onprem.ci import DroneCI
|
||||
from diagrams.generic.os import LinuxGeneral
|
||||
from diagrams.k8s.compute import Pod
|
||||
from diagrams.onprem.container import Docker
|
||||
@ -13,8 +13,8 @@ from diagrams.k8s.podconfig import Secret
|
||||
with Diagram("Dalebot overview", show=False):
|
||||
user = LinuxGeneral("User")
|
||||
with Cluster("On-Prem Kubernetes"):
|
||||
gitlab = Gitlab("Gitlab")
|
||||
gitlabci = Gitlabci("Gitlab CI runner")
|
||||
gitea = Gitea("Gitea")
|
||||
droneci = DroneCI("DroneCI runner")
|
||||
argocd = Argocd("ArgoCD")
|
||||
secrets = Secret("API Keys")
|
||||
bot = Pod("Dale-bot")
|
||||
@ -22,10 +22,10 @@ with Diagram("Dalebot overview", show=False):
|
||||
dockerhub = Docker("Dockerhub")
|
||||
storage = Server("On-prem Storage")
|
||||
|
||||
user >> Edge(label="Push") >> gitlab >> gitlabci
|
||||
gitlabci >> Edge(label="Application sync") >> dockerhub
|
||||
user >> Edge(label="Push") >> gitea >> droneci
|
||||
droneci >> Edge(label="Application sync") >> dockerhub
|
||||
dockerhub >> argocd
|
||||
gitlabci >> Edge(label="Application sync") >> argocd
|
||||
droneci >> Edge(label="Application sync") >> argocd
|
||||
storage >> bot
|
||||
secrets >> bot
|
||||
argocd >> bot
|
||||
|
@ -83,10 +83,13 @@ env:
|
||||
PYTHONUNBUFFERED: 1
|
||||
|
||||
secrets:
|
||||
DRAGON_ENV: DRAGON_ENV
|
||||
discord_token: discord_token
|
||||
ffxiv_token: ffxiv_token
|
||||
gitlab_token: gitlab_token
|
||||
OPENAI_API_KEY: OPENAI_API_KEY
|
||||
token: discord_token
|
||||
twitch_token: twitch_token
|
||||
uexcorp_key: uexcorp_key
|
||||
wolfram_token: wolfram_token
|
||||
wolfram_token: wolfram_token
|
||||
OPENAI_API_KEY: OPENAI_API_KEY
|
||||
apex_api_key: apex_api_key
|
||||
star_citizen_token: star_citizen_token
|
||||
uexcorp_key: uexcorp_key
|
Loading…
x
Reference in New Issue
Block a user