async def METHOD_NAME(self, author: 'Member | User | OptionalMember',
                          target: 'Member | User | OptionalMember', kind: str, *, reason: 'Optional[str]' = None,
                          until: 'Optional[datetime]' = None):
    member = target if isinstance(target, (Member, User)) else target.member
    emoji, action, action_description = action_messages[kind]
    target_str = f'<@!{target.id}>'
    if member:
        target_str += ' | ' + str(member)
    msg = [f'{emoji} **{action}**: <@!{author.id}> {action_description.format(target_str)}']
    if until:
        now = datetime.now(self.bot.tz)
        msg[0] += f' for {until - now}, until {format_dt(until)}'
    msg.append(f'🏷 __User ID__: {target.id}')
    if reason:
        msg.append(f'\N{PENCIL} __Reason__: {reason}')
    else:
        msg.append('\N{PENCIL} __Reason__: No reason provided')
    msg_final = '\n'.join(msg)
    await self.bot.channels['mod-logs'].send(msg_final)
    if 'ban' in kind or 'kick' in kind:
        await self.bot.channels['server-logs'].send(msg_final)