Source code for enrobie.plugins.ainswer.helpers

"""
Functions and routines associated with Enasis Network Chatting Robie.

This file is part of Enasis Network software eco-system. Distribution
is permitted, for more information consult the project license file.
"""



from typing import TYPE_CHECKING
from typing import get_args

from encommon.types import NCNone

from .common import AinswerIgnored
from .common import AinswerResponseDSC
from .common import AinswerResponseIRC
from .common import AinswerResponseMTM
from .history import AinswerHistoryKinds

if TYPE_CHECKING:
    from .plugin import AinswerPlugin
    from ...robie.models import RobieMessage



_KINDS = get_args(AinswerHistoryKinds)



[docs] def composedsc( # noqa: CFQ004 plugin: 'AinswerPlugin', mitem: 'RobieMessage', ) -> None: """ Construct and format message for related chat platform. :param plugin: Plugin class instance for Chatting Robie. :param mitem: Item containing information for operation. """ from ...clients import DSCClient from ...clients.discord.message import DSCMessage assert plugin.thread thread = plugin.thread robie = plugin.robie childs = robie.childs params = plugin.params member = thread.member cqueue = member.cqueue kind = mitem.kind hasme = mitem.hasme message = mitem.message if kind not in _KINDS: return NCNone if (kind == 'chanmsg' and not hasme): return None assert message is not None firschar = ( message[0].strip()) if firschar in '!%&/.': return NCNone assert isinstance( mitem, DSCMessage) type = mitem.event.type if type == 'MESSAGE_UPDATE': return NCNone client = ( childs.clients [mitem.client]) assert isinstance( client, DSCClient) prompt = ( params.prompt .client.dsc) ainswer = ( plugin.ainswer( mitem, prompt, AinswerResponseDSC)) if ainswer == AinswerIgnored: return NCNone citem = mitem.reply( robie, ainswer) cqueue.put(citem)
[docs] def composeirc( # noqa: CFQ004 plugin: 'AinswerPlugin', mitem: 'RobieMessage', ) -> None: """ Construct and format message for related chat platform. :param plugin: Plugin class instance for Chatting Robie. :param mitem: Item containing information for operation. """ from ...clients import IRCClient assert plugin.thread thread = plugin.thread robie = plugin.robie childs = robie.childs params = plugin.params member = thread.member cqueue = member.cqueue kind = mitem.kind hasme = mitem.hasme message = mitem.message if kind not in _KINDS: return NCNone if (kind == 'chanmsg' and not hasme): return None assert message is not None firschar = ( message[0].strip()) if firschar in '!%&/.': return NCNone client = ( childs.clients [mitem.client]) assert isinstance( client, IRCClient) prompt = ( params.prompt .client.irc) ainswer = ( plugin.ainswer( mitem, prompt, AinswerResponseIRC)) if ainswer == AinswerIgnored: return NCNone citem = mitem.reply( robie, ainswer) cqueue.put(citem)
[docs] def composemtm( # noqa: CFQ004 plugin: 'AinswerPlugin', mitem: 'RobieMessage', ) -> None: """ Construct and format message for related chat platform. :param plugin: Plugin class instance for Chatting Robie. :param mitem: Item containing information for operation. """ from ...clients import MTMClient from ...clients.mattermost.message import MTMMessage assert plugin.thread thread = plugin.thread robie = plugin.robie childs = robie.childs params = plugin.params member = thread.member cqueue = member.cqueue kind = mitem.kind hasme = mitem.hasme message = mitem.message if kind not in _KINDS: return NCNone if (kind == 'chanmsg' and not hasme): return None assert message is not None firschar = ( message[0].strip()) if firschar in '!%&/.': return NCNone assert isinstance( mitem, MTMMessage) type = mitem.event.type if type == 'post_edited': return NCNone client = ( childs.clients [mitem.client]) assert isinstance( client, MTMClient) prompt = ( params.prompt .client.mtm) ainswer = ( plugin.ainswer( mitem, prompt, AinswerResponseMTM)) if ainswer == AinswerIgnored: return NCNone citem = mitem.reply( robie, ainswer) cqueue.put(citem)