1
0
Fork 0
mirror of https://github.com/myned/watcher.git synced 2024-11-01 12:22:38 +00:00
watcher/tasks/activity.py

99 lines
3 KiB
Python
Raw Normal View History

2022-06-09 01:59:15 +00:00
import datetime as dt
import hikari
import lightbulb
from lightbulb.ext import tasks
import config as c
plugin = lightbulb.Plugin("activity")
2023-03-16 08:09:03 +00:00
# Check every minute if inactive (or config duration if under 60 secs)
@tasks.task(s=60 if c.config["duration"] >= 60 else c.config["duration"])
2022-06-09 01:59:15 +00:00
async def check_activity():
2022-07-05 22:19:59 +00:00
for author_id, timestamp in c.db.items():
2022-08-16 22:36:37 +00:00
# If time between now and timestamp >= duration
2022-06-09 01:59:15 +00:00
if dt.datetime.now(dt.timezone.utc) - timestamp >= dt.timedelta(seconds=c.config["duration"]):
2022-07-24 03:08:59 +00:00
try:
2022-08-16 18:57:50 +00:00
# Acquire member object
2022-07-24 03:08:59 +00:00
member = plugin.bot.cache.get_member(
c.config["guild"], author_id
) or await plugin.bot.rest.fetch_member(c.config["guild"], author_id)
# Delete member from db if it has excluded role
if c.config["exclude"] in member.role_ids:
del c.db[author_id]
continue
2022-08-16 18:57:50 +00:00
# Enforce activity roles
if c.config["active"] in member.role_ids:
2022-07-24 03:08:59 +00:00
await member.remove_role(c.config["active"])
if c.config["inactive"] not in member.role_ids:
2022-07-24 03:08:59 +00:00
await member.add_role(c.config["inactive"])
2022-08-16 18:57:50 +00:00
# Delete member from db if not found
2022-07-24 03:08:59 +00:00
except hikari.NotFoundError:
del c.db[author_id]
2022-06-09 01:59:15 +00:00
# Listener for bot ready
@plugin.listener(hikari.StartedEvent)
async def on_ready(event):
check_activity.start()
# Check activity and update timestamp
async def update_activity(event, member):
2023-03-16 21:55:44 +00:00
# Exclude other guilds
if event.guild_id != c.config["guild"]:
return
# Exclude and remove activity roles from excluded role
if c.config["exclude"] in member.role_ids:
if c.config["active"] in member.role_ids:
await member.remove_role(c.config["active"])
if c.config["inactive"] in member.role_ids:
await member.remove_role(c.config["inactive"])
2022-06-09 01:59:15 +00:00
return
2022-08-16 18:57:50 +00:00
# Insert current timestamp into db
c.db[member.id] = dt.datetime.now(dt.timezone.utc)
2022-06-09 01:59:15 +00:00
2022-08-16 18:57:50 +00:00
# Toggle activity roles
if c.config["active"] not in member.role_ids:
await member.add_role(c.config["active"])
if c.config["inactive"] in member.role_ids:
await member.remove_role(c.config["inactive"])
# Listener for guild messages
@plugin.listener(hikari.GuildMessageCreateEvent)
async def on_message(event):
2023-03-16 21:55:44 +00:00
# Exclude bots and webhooks
if event.is_human:
await update_activity(event, event.member)
# Listener for guild typing
@plugin.listener(hikari.GuildTypingEvent)
async def on_typing(event):
2023-03-16 21:55:44 +00:00
# Exclude bots
if not event.member.is_bot:
await update_activity(event, event.member)
2022-06-09 01:59:15 +00:00
2022-06-09 03:22:19 +00:00
# Listener for voice state
@plugin.listener(hikari.VoiceStateUpdateEvent)
async def on_voice(event):
2023-03-16 21:55:44 +00:00
# Exclude bots
if not event.state.member.is_bot:
await update_activity(event, event.state.member)
2022-06-09 03:22:19 +00:00
2022-06-09 01:59:15 +00:00
def load(bot):
bot.add_plugin(plugin)
def unload(bot):
bot.remove_plugin(plugin)