69 lines
1.9 KiB
Python
69 lines
1.9 KiB
Python
import twitchio
|
|
|
|
from customcmd.client import ExecClient
|
|
from customcmd.data import CustomCmd, CustomCmdData
|
|
from meta import Bot
|
|
from utils.lib import utc_now, strfdur
|
|
|
|
from ..customcmd.parser import ExecContext
|
|
from .ctxvars import stuff
|
|
|
|
|
|
class CustomCmdUser:
|
|
def __init__(self, user: twitchio.PartialUser):
|
|
self.user = user
|
|
|
|
@property
|
|
def _exec_attr_id(self):
|
|
return self.user.id
|
|
|
|
@property
|
|
def _exec_attr_name(self):
|
|
return self.user.display_name
|
|
|
|
def __str__(self):
|
|
return self.user.display_name or self.user.name or self.user.id
|
|
|
|
async def _exec_attr_whisper(self, ctx, message: str):
|
|
await self.user.send_whisper(
|
|
to_user=self.user,
|
|
message=message
|
|
)
|
|
|
|
async def _exec_attr_followage(self, ctx, channel: twitchio.PartialUser):
|
|
followed_at = None
|
|
query = await channel.fetch_followers(user=self.user)
|
|
async for follower in query.followers:
|
|
followed_at = follower.followed_at
|
|
|
|
if followed_at:
|
|
durstr = strfdur(utc_now() - followed_at)
|
|
resp = f"{self.user.mention} has been following {channel.mention} for {durstr}"
|
|
else:
|
|
return f"{self.user.mention} is not following {channel.mention}"
|
|
|
|
@classmethod
|
|
def from_user(cls, user: twitchio.PartialUser):
|
|
return cls(user)
|
|
|
|
|
|
class CustomContext(ExecContext):
|
|
"""
|
|
CustomCommand ExecContext instantiated from a Twitch message
|
|
"""
|
|
def __init__(
|
|
self,
|
|
bot: Bot,
|
|
message: twitchio.ChatMessage,
|
|
alias: str,
|
|
used_prefix: str,
|
|
**kwargs):
|
|
super().__init__(**kwargs)
|
|
self.bot = bot
|
|
self.message = message
|
|
self.alias = alias
|
|
self.used_prefix = used_prefix
|
|
|
|
self.enter_scope(stuff)
|
|
# TODO: Need a nice way to define some global functions. Registry pattern?
|