3
0
mirror of https://github.com/jlu5/PyLink.git synced 2024-11-01 09:19:23 +01:00

Merge branch 'wip/global' into devel (#434)

Closes #398.
This commit is contained in:
James Lu 2017-03-13 13:41:10 -07:00
commit 4910355711
3 changed files with 55 additions and 0 deletions

View File

@ -60,6 +60,9 @@ Remote versions of the `manage`, `list`, `sync`, and `clear` commands also exist
- `exec.raw` - Allows access to the `raw` command. - `exec.raw` - Allows access to the `raw` command.
- `exec.inject` - Allows access to the `inject` command. - `exec.inject` - Allows access to the `inject` command.
## Global
- `global.global` - Allows access to the `global` command.
## Networks ## Networks
- `networks.disconnect` - Allows access to the `disconnect` command. - `networks.disconnect` - Allows access to the `disconnect` command.
- `networks.autoconnect` - Allows access to the `autoconnect` command. - `networks.autoconnect` - Allows access to the `autoconnect` command.

View File

@ -418,6 +418,10 @@ plugins:
# of kills/saves per X seconds is met. # of kills/saves per X seconds is met.
#- servprotect #- servprotect
# Global plugin: Janus-style global plugin; announces messages to all channels the PyLink
# client is in.
#- global
logging: logging:
# This configuration block defines targets that PyLink should log commands, # This configuration block defines targets that PyLink should log commands,
# errors, etc., to. # errors, etc., to.
@ -665,3 +669,16 @@ stats:
# Determines the time format that the Stats plugin should use for showing dates + times. # Determines the time format that the Stats plugin should use for showing dates + times.
# Defaults to "%a, %d %b %Y %H:%M:%S +0000" (the RFC 2812 standard) if not specified. # Defaults to "%a, %d %b %Y %H:%M:%S +0000" (the RFC 2812 standard) if not specified.
time_format: "%c" time_format: "%c"
global:
# Sets the text format for the global plugin, if it is loaded. This uses a template string as
# documented at https://docs.python.org/3/library/string.html#template-strings, with the
# following substitutions:
# $sender: the nick of the sender
# $network: the short network name of the origin network
# $fullnetwork: the full network name of the origin network
# $current_channel: the channel we're broadcasting on
# $current_network: the network we're currently broadcasting on
# $current_fullnetwork: the full name of the network we're currently broadcasting on
# $text: the global text
#format: "[$sender@$fullnetwork] $text"

35
plugins/global.py Normal file
View File

@ -0,0 +1,35 @@
# global.py: Global Noticing Plugin
import string
from pylinkirc import conf, utils, world
from pylinkirc.log import log
from pylinkirc.coremods import permissions
DEFAULT_FORMAT = "[$sender@$fullnetwork] $text"
def g(irc, source, args):
"""<message text>
Sends out a Instance-wide notice.
"""
permissions.checkPermissions(irc, source, ["global.global"])
message = " ".join(args)
template = string.Template(conf.conf.get('global', {}).get("format", DEFAULT_FORMAT))
for name, ircd in world.networkobjects.items():
if ircd.connected.is_set(): # Only attempt to send to connected networks
for channel in ircd.pseudoclient.channels:
subst = {'sender': irc.getFriendlyName(source),
'network': irc.name,
'fullnetwork': irc.getFullNetworkName(),
'current_channel': channel,
'current_network': ircd.name,
'current_fullnetwork': ircd.getFullNetworkName(),
'text': message}
# Disable relaying or other plugins handling the global message.
ircd.msg(channel, template.safe_substitute(subst), loopback=False)
utils.add_cmd(g, "global", featured=True)