mirror of
https://github.com/osmarks/autobotrobot
synced 2025-01-09 07:00:27 +00:00
prometheus integration
This commit is contained in:
parent
6d18a5c56e
commit
4e1dc6b337
@ -6,9 +6,12 @@ import discord
|
|||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
import re
|
import re
|
||||||
import collections
|
import collections
|
||||||
|
import prometheus_client
|
||||||
|
|
||||||
import util
|
import util
|
||||||
|
|
||||||
|
achievements_achieved = prometheus_client.Counter("abr_achievements", "Achievements achieved by users")
|
||||||
|
|
||||||
Achievement = collections.namedtuple("Achievement", ["name", "condition", "description"])
|
Achievement = collections.namedtuple("Achievement", ["name", "condition", "description"])
|
||||||
|
|
||||||
achievements = {
|
achievements = {
|
||||||
@ -40,6 +43,7 @@ async def achieve(bot: commands.Bot, message: discord.Message, achievement):
|
|||||||
e = util.make_embed(description=description, title="Achievement achieved!", color=util.hashbow(achievement))
|
e = util.make_embed(description=description, title="Achievement achieved!", color=util.hashbow(achievement))
|
||||||
e.set_thumbnail(url=await util.get_asset(bot, f"achievements/{achievement}.png"))
|
e.set_thumbnail(url=await util.get_asset(bot, f"achievements/{achievement}.png"))
|
||||||
await channel.send(embed=e)
|
await channel.send(embed=e)
|
||||||
|
achievements_achieved.inc()
|
||||||
await bot.database.execute("INSERT INTO achievements VALUES (?, ?, ?)", (uid, achievement, util.timestamp()))
|
await bot.database.execute("INSERT INTO achievements VALUES (?, ?, ?)", (uid, achievement, util.timestamp()))
|
||||||
await bot.database.commit()
|
await bot.database.commit()
|
||||||
logging.info("awarded achievement %s to %s", message.author.name, achievement)
|
logging.info("awarded achievement %s to %s", message.author.name, achievement)
|
||||||
|
@ -2,12 +2,16 @@ import util
|
|||||||
import random
|
import random
|
||||||
import logging
|
import logging
|
||||||
import discord
|
import discord
|
||||||
|
import prometheus_client
|
||||||
|
|
||||||
|
heavserver_members = prometheus_client.Gauge("abr_heavserver_members", "Current member count of heavserver")
|
||||||
|
|
||||||
def setup(bot):
|
def setup(bot):
|
||||||
@bot.listen()
|
@bot.listen()
|
||||||
async def on_member_join(member):
|
async def on_member_join(member):
|
||||||
if member.guild.id == util.config["heavserver"]["id"]:
|
if member.guild.id == util.config["heavserver"]["id"]:
|
||||||
logging.info("%s (%d) joined heavserver", member.display_name, member.id)
|
logging.info("%s (%d) joined heavserver", member.display_name, member.id)
|
||||||
|
heavserver_members.set(len(bot.get_guild(util.config["heavserver"]["id"]).members))
|
||||||
if member.bot:
|
if member.bot:
|
||||||
await member.add_roles(discord.utils.get(member.guild.roles, id=util.config["heavserver"]["quarantine_role"]))
|
await member.add_roles(discord.utils.get(member.guild.roles, id=util.config["heavserver"]["quarantine_role"]))
|
||||||
await member.add_roles(discord.utils.get(member.guild.roles, id=random.choice(util.config["heavserver"]["moderator_roles"][:])))
|
await member.add_roles(discord.utils.get(member.guild.roles, id=random.choice(util.config["heavserver"]["moderator_roles"][:])))
|
18
src/main.py
18
src/main.py
@ -12,6 +12,8 @@ import traceback
|
|||||||
import random
|
import random
|
||||||
import rolldice
|
import rolldice
|
||||||
import collections
|
import collections
|
||||||
|
import prometheus_client
|
||||||
|
import prometheus_async.aio
|
||||||
import typing
|
import typing
|
||||||
from numpy.random import default_rng
|
from numpy.random import default_rng
|
||||||
|
|
||||||
@ -35,8 +37,11 @@ cleaner = discord.ext.commands.clean_content()
|
|||||||
def clean(ctx, text):
|
def clean(ctx, text):
|
||||||
return cleaner.convert(ctx, text)
|
return cleaner.convert(ctx, text)
|
||||||
|
|
||||||
|
messages = prometheus_client.Counter("abr_messages", "Messages seen/handled by bot")
|
||||||
|
command_invocations = prometheus_client.Counter("abr_command_invocations", "Total commands invoked (includes failed)")
|
||||||
@bot.event
|
@bot.event
|
||||||
async def on_message(message):
|
async def on_message(message):
|
||||||
|
messages.inc()
|
||||||
words = message.content.split(" ")
|
words = message.content.split(" ")
|
||||||
if len(words) == 10 and message.author.id == 435756251205468160:
|
if len(words) == 10 and message.author.id == 435756251205468160:
|
||||||
await message.channel.send(util.unlyric(message.content))
|
await message.channel.send(util.unlyric(message.content))
|
||||||
@ -44,14 +49,17 @@ async def on_message(message):
|
|||||||
if message.author == bot.user or message.author.discriminator == "0000": return
|
if message.author == bot.user or message.author.discriminator == "0000": return
|
||||||
ctx = await bot.get_context(message)
|
ctx = await bot.get_context(message)
|
||||||
if not ctx.valid: return
|
if not ctx.valid: return
|
||||||
|
command_invocations.inc()
|
||||||
await bot.invoke(ctx)
|
await bot.invoke(ctx)
|
||||||
|
|
||||||
|
command_errors = prometheus_client.Counter("abr_errors", "Count of errors encountered in executing commands.")
|
||||||
@bot.event
|
@bot.event
|
||||||
async def on_command_error(ctx, err):
|
async def on_command_error(ctx, err):
|
||||||
#print(ctx, err)
|
#print(ctx, err)
|
||||||
if isinstance(err, (commands.CommandNotFound, commands.CheckFailure)): return
|
if isinstance(err, (commands.CommandNotFound, commands.CheckFailure)): return
|
||||||
if isinstance(err, commands.MissingRequiredArgument): return await ctx.send(embed=util.error_embed(str(err)))
|
if isinstance(err, commands.MissingRequiredArgument): return await ctx.send(embed=util.error_embed(str(err)))
|
||||||
try:
|
try:
|
||||||
|
command_errors.inc()
|
||||||
trace = re.sub("\n\n+", "\n", "\n".join(traceback.format_exception(err, err, err.__traceback__)))
|
trace = re.sub("\n\n+", "\n", "\n".join(traceback.format_exception(err, err, err.__traceback__)))
|
||||||
logging.error("command error occured (in %s)", ctx.invoked_with, exc_info=err)
|
logging.error("command error occured (in %s)", ctx.invoked_with, exc_info=err)
|
||||||
await ctx.send(embed=util.error_embed(util.gen_codeblock(trace), title="Internal error"))
|
await ctx.send(embed=util.error_embed(util.gen_codeblock(trace), title="Internal error"))
|
||||||
@ -168,18 +176,15 @@ async def random_int(ctx, *, dice):
|
|||||||
await ctx.send("Disabled until CPU use restrictions can be done.")
|
await ctx.send("Disabled until CPU use restrictions can be done.")
|
||||||
#await ctx.send(rolldice.roll_dice(dice)[0])
|
#await ctx.send(rolldice.roll_dice(dice)[0])
|
||||||
|
|
||||||
bad_things = ["lyric", "solarflame", "lyric", "319753218592866315", "andrew", "6", "c++", "☭", "communism"]
|
|
||||||
good_things = ["potato", "heav", "gollark", "helloboi", "bee", "hellboy", "rust", "ferris", "crab", "transistor", "endos", "make esolang"]
|
|
||||||
negations = ["not", "bad", "un", "kill", "n't", "¬", "counter"]
|
|
||||||
def weight(thing):
|
def weight(thing):
|
||||||
lthing = thing.lower()
|
lthing = thing.lower()
|
||||||
weight = 1.0
|
weight = 1.0
|
||||||
if lthing == "c": weight *= 0.3
|
if lthing == "c": weight *= 0.3
|
||||||
for bad_thing in bad_things:
|
for bad_thing in util.config["autobias"]["bad_things"]:
|
||||||
if bad_thing in lthing: weight *= 0.5
|
if bad_thing in lthing: weight *= 0.5
|
||||||
for good_thing in good_things:
|
for good_thing in util.config["autobias"]["good_things"]:
|
||||||
if good_thing in lthing: weight *= 2.0
|
if good_thing in lthing: weight *= 2.0
|
||||||
for negation in negations:
|
for negation in util.config["autobias"]["negations"]:
|
||||||
for _ in range(lthing.count(negation)): weight = 1 / weight
|
for _ in range(lthing.count(negation)): weight = 1 / weight
|
||||||
return weight
|
return weight
|
||||||
|
|
||||||
@ -229,6 +234,7 @@ async def run_bot():
|
|||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
loop = asyncio.get_event_loop()
|
loop = asyncio.get_event_loop()
|
||||||
|
loop.create_task(prometheus_async.aio.web.start_http_server(port=config["metrics_port"]))
|
||||||
try:
|
try:
|
||||||
loop.run_until_complete(run_bot())
|
loop.run_until_complete(run_bot())
|
||||||
except KeyboardInterrupt:
|
except KeyboardInterrupt:
|
||||||
|
@ -2,9 +2,12 @@ import json
|
|||||||
import logging
|
import logging
|
||||||
from datetime import datetime, timezone
|
from datetime import datetime, timezone
|
||||||
import discord.ext.tasks as tasks
|
import discord.ext.tasks as tasks
|
||||||
|
import prometheus_client
|
||||||
|
|
||||||
import util
|
import util
|
||||||
|
|
||||||
|
reminders_fired = prometheus_client.Counter("abr_reminders", "Reminders successfully delivered to users")
|
||||||
|
|
||||||
def setup(bot):
|
def setup(bot):
|
||||||
@bot.command(brief="Set a reminder to be reminded about later.", rest_is_raw=True, help="""Sets a reminder which you will (probably) be reminded about at/after the specified time.
|
@bot.command(brief="Set a reminder to be reminded about later.", rest_is_raw=True, help="""Sets a reminder which you will (probably) be reminded about at/after the specified time.
|
||||||
All times are UTC.
|
All times are UTC.
|
||||||
@ -86,14 +89,16 @@ def setup(bot):
|
|||||||
print("trying", method_name, rid)
|
print("trying", method_name, rid)
|
||||||
try:
|
try:
|
||||||
await func(extra, text)
|
await func(extra, text)
|
||||||
to_expire.append(rid)
|
reminders_fired.inc()
|
||||||
|
to_expire.append((1, rid)) # 1 = expired normally
|
||||||
break
|
break
|
||||||
except Exception as e: logging.warning("failed to send %d to %s", rid, method_name, exc_info=e)
|
except Exception as e: logging.warning("failed to send %d to %s", rid, method_name, exc_info=e)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logging.warning("Could not send reminder %d", rid, exc_info=e)
|
logging.warning("Could not send reminder %d", rid, exc_info=e)
|
||||||
for expiry_id in to_expire:
|
to_expire.append((2, rid)) # 2 = errored
|
||||||
|
for expiry_type, expiry_id in to_expire:
|
||||||
logging.info("Expiring reminder %d", expiry_id)
|
logging.info("Expiring reminder %d", expiry_id)
|
||||||
await bot.database.execute("UPDATE reminders SET expired = 1 WHERE id = ?", (expiry_id,))
|
await bot.database.execute("UPDATE reminders SET expired = ? WHERE id = ?", (expiry_type, expiry_id))
|
||||||
await bot.database.commit()
|
await bot.database.commit()
|
||||||
|
|
||||||
@remind_worker.before_loop
|
@remind_worker.before_loop
|
||||||
|
Loading…
Reference in New Issue
Block a user