예제 #1
0
파일: fixtures.py 프로젝트: utspect/pydle
def with_client(*features, connected=True, **options):
    if not features:
        features = (pydle.client.BasicClient, )
    if features not in with_client.classes:
        with_client.classes[features] = pydle.featurize(MockClient, *features)

    def inner(f):
        def run():
            server = MockServer()
            client = with_client.classes[features]('TestcaseRunner',
                                                   mock_server=server,
                                                   **options)
            if connected:
                client.connect('mock://local', 1337, eventloop=MockEventLoop())

            try:
                ret = f(client=client, server=server)
                return ret
            finally:
                if client.eventloop:
                    client.eventloop.stop()

        run.__name__ = f.__name__
        return run

    return inner
예제 #2
0
class TwitchBot(pydle.featurize(
		pydle.features.RFC1459Support,
		pydle.features.IRCv3Support,
		pydle.features.ircv3.CapabilityNegotiationSupport
		)):
    def __init__(self):
        nickname = os.getenv('TWITCH_BOT_NICK')
        super().__init__(
            nickname=nickname,
            realname='BakedBeansBot'
        )
        self.twitch_chan = f'#{nickname}'

    async def connect(self):
        await super().connect(
            hostname='irc.chat.twitch.tv',
            port=6697,
            password=os.getenv('TWITCH_BOT_PASSWORD'),
            tls=True,
            tls_verify=False
        )

    async def on_connect(self):
        await super().on_connect()
        # await self.capreq(':twitch.tv/membership')
        # await self.capreq(':twitch.tv/tags')
        # await self.capreq(':twitch.tv/commands')
        await self.join(self.twitch_chan)

    def on_raw_004(self, msg):
        """
        Twitch IRC does not match what the pydle library expects
        which causes Pydle to raise exceptions.
        Override on_raw_004 and prevent super call

        Copied from:
        https://github.com/LangridgeDaniel/python-twitch-irc/blob/master/python_twitch_irc/irc.py
        """
        logging.debug(f'on_raw_004: {msg}')

    async def capreq(self, message):
        await self.rawmsg('CAP REQ', message)

    async def raid_target(self, host_chan: str, chan: typing.Optional[str] = None):
        if chan is None:
            await self.message(self.twitch_chan, '.unraid')
        else:
            await self.message(self.twitch_chan, f'.raid {chan}')

    '''
예제 #3
0
파일: fixtures.py 프로젝트: Harmon758/pydle
def with_client(*features, connected=True, **options):
    if not features:
        features = (pydle.client.BasicClient,)
    if features not in with_client.classes:
        with_client.classes[features] = pydle.featurize(MockClient, *features)

    def inner(f):
        def run():
            server = MockServer()
            client = with_client.classes[features]('TestcaseRunner', mock_server=server, **options)
            if connected:
                client.connect('mock://local', 1337, eventloop=MockEventLoop())

            try:
                ret = f(client=client, server=server)
                return ret
            finally:
                if client.eventloop:
                    client.eventloop.stop()

        run.__name__ = f.__name__
        return run
    return inner
예제 #4
0
import base64
import urllib.request
import pydle
import configparser

config = configparser.ConfigParser()
config.read('config.ini')
twitchConfig = config['twitch']

streamnames = twitchConfig['Stream'].split(',')
nickname = twitchConfig['Nickname']
password = twitchConfig['Password']

BaseIrcClass = pydle.featurize(pydle.features.RFC1459Support,
                               pydle.features.IRCv3Support)


class MyOwnBot(BaseIrcClass):
    async def on_raw_004(self, msg):
        return

    async def on_connect(self):
        for stream in streamnames:
            print("Joining", stream)
            await self.join(stream)

    async def on_message(self, target, nick, message):
        name = str(base64.urlsafe_b64encode(nick.encode("utf-8")), "utf-8")
        message = str(base64.urlsafe_b64encode(message.encode("utf-8")),
                      "utf-8")
        target = str(base64.urlsafe_b64encode(target.encode("utf-8")), "utf-8")
예제 #5
0
CommandEventFunc = Callable[['Client', 'ParsedRaw'], None]
CommandEventList = List[CommandEventFunc]
CommandEventPlugsDict = Dict[str, CommandEventList]

InitFunc = Callable[['Client'], None]
InitList = List[CommandEventFunc]
InitDict = Dict[str, CommandEventList]

FuncUnion = Union[InputSieveList, OutputSieveList, CommandEventList, InitList]
AllPlugsDict = Dict[str, FuncUnion]
DBResult = Optional[List[Tuple[Optional[str], ...]]]

PydleClient = pydle.featurize(pydle.features.RFC1459Support,
                              pydle.features.IRCv3Support,
                              pydle.features.AccountSupport,
                              pydle.features.CTCPSupport,
                              pydle.features.ISUPPORTSupport,
                              pydle.features.TLSSupport)


class Client(PydleClient):
    """Taigabot Client."""
    async def stop(self, reset: bool = False) -> None:
        """Is used to stop or restart the bot."""
        global restarted
        restarted = reset
        os.kill(os.getpid(), signal.SIGINT)

    async def message_handler(self, data: 'ParsedRaw') -> None:
        """
        Is used for running sieves, events and commands if applicable.
        """ PRIVMSG command. """
        nick, metadata = self._parse_user(message.source)
        tags = message.tags
        target, message = message.params

        self._sync_user(nick, metadata)

        await self.on_message(target, nick, message, tags)
        if self.is_channel(target):
            await self.on_channel_message(target, nick, message, tags)
        else:
            await self.on_private_message(nick, message, tags)


# End Github code
BotClass = pydle.featurize(pydle.Client, PrivMessageTagSupport)


# From https://stackoverflow.com/a/3540315/3153319
def random_line(afile):
    line = next(afile)
    for num, aline in enumerate(afile, 2):
        if random.randrange(num): continue
        line = aline
    return line


# End SO code


class MusicConversationBot(BotClass):
예제 #7
0
    import subprocess
    import _thread
    from pyfiglet import Figlet
except Exception as e:  # oops!
    print(
        "There has been an error when including modules. It means that you haven't installed one of those. Please check and try again."
    )
    os._exit(1)

logging.basicConfig(level=logging.DEBUG)

config = json.load(open("config.json"))

BaseClient = pydle.featurize(pydle.features.RFC1459Support,
                             pydle.features.WHOXSupport,
                             pydle.features.AccountSupport,
                             pydle.features.TLSSupport,
                             pydle.features.IRCv3_1Support)


class Donger(BaseClient):
    def __init__(self, nick, *args, **kwargs):
        super().__init__(nick, *args, **kwargs)

        # This is to remember the millions of misc variable names
        self.pendingFights = {
        }  # Pending (not !accepted) fights. ({'player': {'ts': 123, 'deathmatch': False, 'versusone': False, 'players': [...], 'pendingaccept': [...]}, ...}

        # Game vars (Reset these in self.win)
        self.deathmatch = False
        self.deatharena = False
예제 #8
0
파일: bot.py 프로젝트: cazagen/botbot
from configparser import ConfigParser
from functools import partial
from pluginbase import PluginBase
from pydle. async import EventLoop
from tornado.ioloop import PeriodicCallback

from ircbot.webserver import setup_webserver

logger = logging.getLogger(__name__)

here = os.path.abspath(os.path.dirname(__file__))
get_path = partial(os.path.join, here)

plugin_base = PluginBase(package='ircbot.plugins')

BotbotClient = pydle.featurize(pydle.Client, pydle.features.IRCv3Support,
                               pydle.features.WHOXSupport)


class BotBot(pydle.Client):
    def __init__(self,
                 fallback_nicknames=[],
                 username=None,
                 realname=None,
                 **kwargs):
        super(BotBot, self).__init__("botbot-defaultnickname",
                                     fallback_nicknames=fallback_nicknames,
                                     username=username,
                                     realname=realname,
                                     **kwargs)
        self.config = None
        self.join_channels = None
예제 #9
0
import configparser
import base64
import datetime
import binascii
import sqlite3
import socket
import json
import urllib.parse
import dns
try:
    import getdns
    dns_enabled = True
except ModuleNotFoundError:
    dns_enabled = False

MyBaseClient = pydle.featurize(pydle.MinimalClient,
                               pydle.features.ircv3.SASLSupport)

conn = None
valid_tlds = None


class BanaanBot(MyBaseClient):
    def on_connect(self):
        super().on_connect()
        for i in config['Bot']['channels'].split(','):
            self.join(i)

    def on_unknown(self, message):
        super().on_unknown(message)
        #print(message)
    def on_raw(self, message):
예제 #10
0
파일: dors.py 프로젝트: Polsaker/dors
#!/usr/bin/env python3

import pydle
import config
import os
import importlib
import re
import traceback
import threading
import copy
import time

Waifu = pydle.featurize(pydle.features.RFC1459Support, pydle.features.WHOXSupport,
                             pydle.features.ISUPPORTSupport,
                             pydle.features.AccountSupport, pydle.features.TLSSupport, 
                             pydle.features.IRCv3_1Support, pydle.features.CTCPSupport)

# Event object!

class Event(object):
    def __init__(self, source, target, message):
        
        self.source = source
        self.target = target
        self.message = message
        
        self.match = None # regex match for stuffHooks
        
        self.pm = False if target.startswith('#') else True
        self.replyto = source if self.pm else target
        
예제 #11
0
파일: dors.py 프로젝트: pembo210/dors
#!/usr/bin/env python3

import pydle
import config
import os
import importlib
import re
import traceback
import threading
import copy
import time

Waifu = pydle.featurize(pydle.features.RFC1459Support, pydle.features.WHOXSupport,
                             pydle.features.ISUPPORTSupport,
                             pydle.features.AccountSupport, pydle.features.TLSSupport, 
                             pydle.features.IRCv3_1Support, pydle.features.CTCPSupport)

# Event object!

class Event(object):
    def __init__(self, source, target, message):
        
        self.source = source
        self.target = target
        self.message = message
        
        self.match = None # regex match for stuffHooks
        
        self.pm = False if target.startswith('#') else True
        self.replyto = source if self.pm else target
        
예제 #12
0
import logging
import socket

import pydle

import config

BotBase = pydle.featurize(pydle.features.RFC1459Support, pydle.features.TLSSupport)

logger = logging.getLogger("IRC")
logger.setLevel(logging.DEBUG)

cfg = config.init()


class IRC(BotBase):
    tracking = None
    RECONNECT_MAX_ATTEMPTS = 100
    announcer = None

    # temp fix until pydle handles connect failures
    def connect(self, *args, **kwargs):
        try:
            super().connect(*args, **kwargs)
        except socket.error:
            self.on_disconnect(expected=False)

    def set_tracker(self, track):
        self.tracking = track

    def on_connect(self):
예제 #13
0
import random
import time
from pyfiglet import Figlet
import copy
import peewee
import importlib
import subprocess
import datetime

loggingFormat = '%(asctime)s %(levelname)s:%(name)s: %(message)s'
logging.basicConfig(level=logging.DEBUG, format=loggingFormat)

config = json.load(open("config.json"))

BaseClient = pydle.featurize(pydle.features.RFC1459Support, pydle.features.WHOXSupport,
                             pydle.features.AccountSupport, pydle.features.TLSSupport,
                             pydle.features.IRCv3_1Support)


class Donger(BaseClient):
    def __init__(self, nick, *args, **kwargs):
        super().__init__(nick, *args, **kwargs)

        # This is to remember the millions of misc variable names
        self.pendingFights = {}  # Pending (not !accepted) fights. ({'player': {'ts': 123, 'deathmatch': False, 'versusone': False, 'players': [...], 'pendingaccept': [...]}, ...}

        # Game vars (Reset these in self.win)
        self.deathmatch = False
        self.gameRunning = False
        self.turnStart = 0
        self.players = {}  # Players. {'polsaker': {'hp': 100, 'heals': 5, 'zombie': False, 'praised': False, 'gdr': 1}, ...}
예제 #14
0
#!/usr/bin/env python3
# -- coding: utf-8 --

import pydle
import logging
# import threading
from PyQt5.QtCore import QThread, QObject, pyqtSignal
from imotion.const import *

# from src.database import Database
BaseClient = pydle.featurize(
    pydle.features.RFC1459Support,
    pydle.features.CTCPSupport,
    pydle.features.IRCv3_1Support,
    pydle.features.ircv3.SASLSupport
)

logger = logging.getLogger("imotion")


class IRCCommunicator(QObject):

    recv_msg = pyqtSignal(str, str, str)
    priv_msg = pyqtSignal(str, str)
    chan_notice = pyqtSignal(str, str, str)
    join_chan = pyqtSignal(str)
    server_info = pyqtSignal(str)
    chan_info = pyqtSignal(str, str)
    connected = pyqtSignal()

    def __init__(self):