fix: Add lock to prevent update race.
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
import asyncio
|
||||
from string import punctuation
|
||||
import datetime as dt
|
||||
from datetime import datetime, timedelta
|
||||
@@ -40,6 +41,7 @@ class FocusComponent(cmds.Component):
|
||||
register_channel(self.channel.name, self.channel)
|
||||
|
||||
self._last_deleted: dict[int, datetime] = {}
|
||||
self.hyperfocus_lock = asyncio.Lock()
|
||||
|
||||
# ----- API -----
|
||||
async def component_load(self):
|
||||
@@ -88,6 +90,10 @@ class FocusComponent(cmds.Component):
|
||||
|
||||
@cmds.Component.listener()
|
||||
async def event_message(self, payload: twitchio.ChatMessage):
|
||||
async with self.hyperfocus_lock:
|
||||
await self.handle_message(payload)
|
||||
|
||||
async def handle_message(self, payload: twitchio.ChatMessage):
|
||||
# Check if chatter is currently hyperfocused
|
||||
profile = await self.bot.profiles.fetch_profile(payload.chatter, touch=True)
|
||||
hyperfocused = await self.get_hyperfocus(profile.profileid)
|
||||
@@ -173,6 +179,7 @@ class FocusComponent(cmds.Component):
|
||||
pid = profile.profileid
|
||||
comm = await self.bot.profiles.fetch_community(ctx.broadcaster, touch=True)
|
||||
|
||||
async with self.hyperfocus_lock:
|
||||
await Hyperfocuser.table.delete_where(profileid=pid)
|
||||
focuser = await Hyperfocuser.create(
|
||||
profileid=pid,
|
||||
@@ -193,6 +200,7 @@ class FocusComponent(cmds.Component):
|
||||
@cmds.command(name="unfocus")
|
||||
async def unfocus_cmd(self, ctx):
|
||||
profile = await self.bot.profiles.fetch_profile(ctx.chatter, touch=True)
|
||||
async with self.hyperfocus_lock:
|
||||
row = await Hyperfocuser.fetch(profile.profileid)
|
||||
if row:
|
||||
await row.delete()
|
||||
@@ -209,6 +217,7 @@ class FocusComponent(cmds.Component):
|
||||
|
||||
profile = await self.bot.profiles.fetch_profile(user, touch=False)
|
||||
|
||||
async with self.hyperfocus_lock:
|
||||
if hyper := (await self.get_hyperfocus(profile.profileid)):
|
||||
durstr = strfdelta(hyper.ends_at - utc_now())
|
||||
await ctx.reply(
|
||||
@@ -228,3 +237,10 @@ class FocusComponent(cmds.Component):
|
||||
await ctx.reply(
|
||||
"Add HYPERFOCUS to your channel by authorising me here: https://croccyfocus.thewisewolf.dev/invite"
|
||||
)
|
||||
|
||||
@cmds.command(name="focuslist")
|
||||
@cmds.is_moderator()
|
||||
async def focuslist_cmd(self, ctx):
|
||||
comm = await self.bot.profiles.fetch_community(ctx.broadcaster, touch=True)
|
||||
link = f"https://croccyfocus.thewisewolf.dev/widget/?community={comm}"
|
||||
await ctx.reply(f"Browser source link for your channel's hyperfocus: {link}")
|
||||
|
||||
Reference in New Issue
Block a user