From 00c5e4be8ecfa8c4f14f13c512fffdbfd1aadeb5 Mon Sep 17 00:00:00 2001 From: Ben Harris Date: Fri, 22 Mar 2019 12:20:02 -0400 Subject: insults and rslap --- weechat/.weechat/perl/autoload/rslap.pl | 1 + weechat/.weechat/perl/rslap.pl | 309 ++++++++++++++++++++++++++++++++ 2 files changed, 310 insertions(+) create mode 120000 weechat/.weechat/perl/autoload/rslap.pl create mode 100644 weechat/.weechat/perl/rslap.pl (limited to 'weechat/.weechat/perl') diff --git a/weechat/.weechat/perl/autoload/rslap.pl b/weechat/.weechat/perl/autoload/rslap.pl new file mode 120000 index 0000000..ca21dec --- /dev/null +++ b/weechat/.weechat/perl/autoload/rslap.pl @@ -0,0 +1 @@ +../rslap.pl \ No newline at end of file diff --git a/weechat/.weechat/perl/rslap.pl b/weechat/.weechat/perl/rslap.pl new file mode 100644 index 0000000..0229c11 --- /dev/null +++ b/weechat/.weechat/perl/rslap.pl @@ -0,0 +1,309 @@ +# +# rslap.pl - Random slap strings for weechat 0.3.0 +# Version 1.3.1 +# +# Let's you /slap a nick but with a random string +# Customisable via the 'rslap' file in your config dir +# The rslap file is plain text, with one message per line +# Use '$nick' to denote where a nick should go +# +# Usage: +# /rslap [ +# Slaps with a random slap, entry will use that entry +# number instead of a random one +# +# /rslap_info +# This tells you how many messages there are, and prints them +# +# /rslap_add +# /rslap_remove +# Adds / removes string/id from the available list and attempts +# to update the rslap file +# +# /set plugins.var.perl.rslap.slapback +# Sets the slapback, takes "off", "on/random", or "n" where n +# is a valid entry number + +# History: +# 2010-12-30, KenjiE20 : +# v1.3.1 -fix: uninitialised variable error +# 2010-04-25, KenjiE20 : +# v1.3 -feature: Ability to add/remove entries +# -feature: Can specify which string /rslap will use +# -feature: Slapback with specified/random string +# 2009-08-10, KenjiE20 : +# v1.2: Correct /help format to match weechat base +# 2009-07-28, KenjiE20 : +# v1.1: -fix: Make file loading more robust +# and strip out comments/blank lines +# 2009-07-09, KenjiE20 : +# v1.0: Initial Public Release + +# Copyright (c) 2009-2010 by KenjiE20 +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# + +weechat::register("rslap", "KenjiE20", "1.3.1", "GPL3", "Slap Randomiser", "", ""); + +$file = weechat::info_get("weechat_dir", "")."/rslap"; +my @lines; +$lastrun = 0; +$rslap_slapback_hook = 0; +rslap_start(); +rslap_slapback_toggle("","",weechat::config_get_plugin ("slapback")); + +sub rslap_start +{ + if (-r $file) + { + weechat::hook_command("rslap", "Slap a nick with a random string", "nickname [entry]", "nickname: Nick to slap\n entry: which entry number to use (/rslap_info for the list)\n\n /set plugins.var.perl.rslap.slapback\n Sets the slapback, takes \"off\", \"on/random\", or \"n\" where n is a valid entry number", "%(nicks)", "rslap", ""); + weechat::hook_command("rslap_info", "Prints out the current strings /rslap will use", "", "", "", "rslap_info", ""); + weechat::hook_command("rslap_add", "Add a new slap entry", "[slap string]", "", "", "rslap_add", ""); + weechat::hook_command("rslap_remove", "Remove a slap entry", "[entry number]", "", "", "rslap_remove", ""); + + weechat::hook_config("plugins.var.perl.rslap.slapback", "rslap_slapback_toggle", ""); + + if (!(weechat::config_is_set_plugin ("slapback"))) + { + weechat::config_set_plugin("slapback", "off"); + } + + open FILE, $file; + @lines = ; + close (FILE); + + foreach (@lines) + { + s/^#.*$//; + chomp; + } + @lines = grep /\S/, @lines; + } + else + { + rslap_make_file(); + } + return weechat::WEECHAT_RC_OK; +} + +sub rslap_info +{ + weechat::print ("", "Number of available strings: ".weechat::color("bold").@lines.weechat::color("-bold")."\n"); + $max_align = length(@lines); + $count = 1; + foreach (@lines) + { + weechat::print ("","\t ".(" " x ($max_align - length($count))).$count.": ".$_."\n"); + $count++; + } + return weechat::WEECHAT_RC_OK; +} + +sub rslap_add +{ + my $text = $_[2] if ($_[2]); + if ($text) + { + push (@lines, $text); + weechat::print("", "Added entry ".@lines." as: \"".$text."\""); + rslap_update_file(); + return weechat::WEECHAT_RC_OK; + } + else + { + return weechat::WEECHAT_RC_OK; + } +} + +sub rslap_remove +{ + my $entry = $_[2] if ($_[2]); + if ($entry =~ m/^\d+/) + { + $entry--; + if ($lines[$entry]) + { + $removed = $lines[$entry]; + $lines[$entry] = ''; + @lines = grep /\S/, @lines; + weechat::print("", "Removed entry ".weechat::color("bold").($entry + 1).weechat::color("-bold")." (".$removed.")"); + rslap_update_file(); + return weechat::WEECHAT_RC_OK; + } + else + { + weechat::print ("", weechat::prefix("error")."Not a valid entry"); + } + } + else + { + return weechat::WEECHAT_RC_OK; + } +} + +sub rslap_slapback_toggle +{ + $point = $_[0]; + $name = $_[1]; + $value = $_[2]; + + if ($value eq "off") + { + if ($rslap_slapback_hook) + { + weechat::unhook($rslap_slapback_hook); + $rslap_slapback_hook = 0; + } + } + elsif ($value ne "off") + { + if (!$rslap_slapback_hook) + { + $rslap_slapback_hook = weechat::hook_print("", "", "", 1, "rslap_slapback_cb", ""); + } + } + return weechat::WEECHAT_RC_OK; +} + +sub rslap +{ + $buffer = $_[1]; + $args = $_[2]; + if (weechat::buffer_get_string($buffer, "plugin") eq "irc") + { + ($nick, $number) = split(/ /,$args); + if ($nick eq "") + { + weechat::print ("", weechat::prefix("error")."No nick given"); + } + else + { + if (defined $number && $number =~ m/^\d+$/) + { + $number--; + if (!$lines[$number]) + { + weechat::print ($buffer, weechat::prefix("error")."Not a valid entry"); + return weechat::WEECHAT_RC_OK; + } + } + else + { + $number = int(rand(@lines)); + } + $str = $lines[$number]; + $str =~ s/\$nick/$nick/; + $lastrun = time; + weechat::command ($buffer, "/me ".$str); + } + } + else + { + weechat::print ($buffer, weechat::prefix("error")."Must be used on an IRC buffer"); + } + return weechat::WEECHAT_RC_OK; +} + +sub rslap_slapback_cb +{ + $cb_datap = $_[0]; + $cb_bufferp = $_[1]; + $cb_date = $_[2]; + $cb_tags = $_[3]; + $cb_disp = $_[4]; + $cb_high = $_[5]; + $cb_prefix = $_[6]; + $cb_msg = $_[7]; + + $bufname = weechat::buffer_get_string($cb_bufferp, 'name'); + # Only do something if a) IRC message b) is an action c) displayed and d) is a channel + if ($cb_tags =~ /irc_privmsg/ && $cb_tags =~ /irc_action/ && $cb_disp eq "1" && $bufname =~ /.*\.[#&\+!].*/) + { + # Anti-recursive + if ((time - $lastrun) < 10) + { + return weechat::WEECHAT_RC_OK; + } + # Strip colour + $cb_msg = weechat::string_remove_color($cb_msg, ""); + # Snip sender from message + $from_nick = substr($cb_msg, 0, index($cb_msg, " ")); + $cb_msg = substr($cb_msg, length($from_nick)); + # check for our nick and slap in message + $cur_nick = weechat::buffer_get_string($cb_bufferp, "localvar_nick"); + if ($from_nick ne $cur_nick && $cb_msg =~ /slap/ && $cb_msg =~ /\s$cur_nick(\s|$)/) + { + if (weechat::config_get_plugin("slapback") =~ m/^\d+$/) + { + rslap("", $cb_bufferp, $from_nick." ".weechat::config_get_plugin("slapback")); + } + else + { + rslap("", $cb_bufferp, $from_nick); + } + } + } + return weechat::WEECHAT_RC_OK; +} + +sub rslap_make_file +{ + weechat::print ("", "Attempting to create default file at: $file"); + + open FILE, ">", $file; + $defs = "slaps \$nick around a bit with a large trout\n". + "gives \$nick a clout round the head with a fresh copy of WeeChat\n". + "slaps \$nick with a large smelly trout\n". + "breaks out the slapping rod and looks sternly at \$nick\n". + "slaps \$nick's bottom and grins cheekily\n". + "slaps \$nick a few times\n". + "slaps \$nick and starts getting carried away\n". + "would slap \$nick, but is not being violent today\n". + "gives \$nick a hearty slap\n". + "finds the closest large object and gives \$nick a slap with it\n". + "likes slapping people and randomly picks \$nick to slap\n". + "dusts off a kitchen towel and slaps it at \$nick"; + print FILE $defs; + close (FILE); + if (!(-r $file)) + { + weechat::print ("", weechat::prefix("error")."Problem creating file: $file\n". + weechat::prefix("error")."Make sure you can write to the location."); + return weechat::WEECHAT_RC_ERROR; + } + else + { + weechat::print ("", "File created at: $file successfully"); + rslap_start(); + return weechat::WEECHAT_RC_OK; + } +} + +sub rslap_update_file +{ + $defs = ''; + foreach (@lines) + { + $defs = $defs."\n".$_; + } + unless(open (FILE, ">", $file)) + { + weechat::print ("", weechat::prefix("error")."Cannot write to file: $file"); + return weechat::WEECHAT_RC_ERROR; + } + print FILE $defs; + close (FILE); + return weechat::WEECHAT_RC_OK; +} -- cgit 1.4.1