platypush/platypush/schemas/irc.py

136 lines
4.1 KiB
Python
Raw Normal View History

2021-11-14 19:43:19 +01:00
import os
from marshmallow import fields
from marshmallow.schema import Schema
from platypush.schemas import StrippedString
class IRCServerSchema(Schema):
server = fields.String(
required=True,
metadata=dict(
description='Server address or hostname',
example='irc.example.org',
)
)
port = fields.Int(
missing=6667,
metadata=dict(
description='IRC server port',
example=6667,
)
)
password = fields.String(allow_none=True, default=None, metadata=dict(example='password'))
nickname = fields.String(required=True, metadata=dict(example='testbot'))
realname = fields.String(allow_none=True, metadata=dict(example='My Real Name'))
alias = StrippedString(
metadata=dict(description='Friendly name for this bot/server connection')
)
channels = fields.List(
fields.String(),
missing=list,
metadata=dict(
description='List of channels the bot will connect to',
example=['#channel1', '#channel2', '#channel3']
)
)
ssl = fields.Boolean(missing=False)
ipv6 = fields.Boolean(missing=False)
stop_message = StrippedString(missing='Application stopped', metadata=dict(description='Quit/die message'))
dcc_ip_whitelist = fields.List(
fields.String,
missing=list,
metadata=dict(
description='If specified then only DCC connections from the IP addresses on this list will be accepted',
)
)
dcc_ip_blacklist = fields.List(
fields.String,
missing=list,
metadata=dict(
description='If specified then DCC connections from the IP addresses on this list will be rejected',
)
)
dcc_nick_whitelist = fields.List(
fields.String,
missing=list,
metadata=dict(
description='If specified then only DCC connections from the nicknames on this list will be accepted',
)
)
dcc_nick_blacklist = fields.List(
fields.String,
missing=list,
metadata=dict(
description='If specified then DCC connections from the nicknames on this list will be rejected',
)
)
dcc_downloads_dir = fields.String(
missing=os.path.join(os.path.expanduser('~'), 'Downloads'),
metadata=dict(description='DCC file transfers will be downloaded to this folder (default: ~/Downloads)'),
)
response_timeout = fields.Number(
missing=30.,
metadata=dict(
description='How long we should wait for a response to an IRC request '
'(default: 30 seconds)',
)
)
dcc_file_transfer_timeout = fields.Number(
missing=30.,
metadata=dict(
description='How long we should wait on a pending DCC file transfer with '
'no data being transmitted (default: 30 seconds)',
)
)
dcc_accept_timeout = fields.Number(
missing=300.,
metadata=dict(
description='How long we should wait on a pending DCC request '
'until the user accepts (default: 300 seconds)',
)
)
dcc_max_connections = fields.Int(
missing=10,
metadata=dict(
description='Maximum number of concurrent DCC connections allowed on this bot (default: 10)'
)
)
class IRCServerStatusSchema(Schema):
server = StrippedString(required=True)
port = fields.Int(required=True)
alias = StrippedString()
real_name = fields.String()
nickname = fields.String()
is_connected = fields.Boolean()
connected_channels = fields.List(fields.String)
class IRCChannelSchema(Schema):
name = fields.String(required=True)
modes = fields.List(fields.String)
opers = fields.List(fields.String)
owners = fields.List(fields.String)
users = fields.List(fields.String)
voiced = fields.List(fields.String)
is_invite_only = fields.Boolean()
is_moderated = fields.Boolean()
is_protected = fields.Boolean()
is_secret = fields.Boolean()