egghelp.org community Forum Index
[ egghelp.org home | forum home ]
egghelp.org community
Discussion of eggdrop bots, shell accounts and tcl scripts.
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

[Request] Assistance Notifying System - King

 
Post new topic   Reply to topic    egghelp.org community Forum Index -> Script Requests
View previous topic :: View next topic  
Author Message
King
Voice


Joined: 04 Feb 2016
Posts: 5
Location: America

PostPosted: Sun Feb 14, 2016 4:28 pm    Post subject: [Request] Assistance Notifying System - King Reply with quote

Hello world!

This script is very simple and easy to use, this would be classified as a helper for support channels. This script is used to notify users listed on a .txt file whenever someone is in need of help, let me explain further below.

Whenever someone joins the channel they'll be given a notice about how to request help, shown in the script below. Once someone type !assist in the channel, the bot will PRIVMSG all the users on the assist list saying someone needs assistance on that channel, which shows their nickname and userhost.

Example:

Joins: King (King@userhost.example) joins #channel

[notice from Bot] Welcome to the IRC support channel King!
[notice from Bot] If you need assistance, type !assist

<~King> !assist
[notice from Bot] Thanks for your corperation King! Your request was sent, please wait for at least 5-15 minutes for a response!

A private messag from the bot to the users on the list would show

<Bot> King (King@userhost.example) has requested for your assistance on #channel

See how simple it is? Now I need help making the list a bit dynamic, if I add a user, and they changed nick, the bot still pm's the nick, or if the user isn't online. So I need the script to pm online users listed on the list along with if they've changed nickname.

I've consider using handles, but then perhaps the users would need to be logged on to the bot and get a global flag, reason why I didn't do it this way is because I want to be able to !add or !remove users from the list instantly, without having them registering for a handle or requires each handle to be logged in and create a password.

The best way is by a file which stores listed users and get the bot to check each names on the file to see if they're on the channel or if any host matches the specified name on the list, whichever is preferred..

Here's my working code, this is the code I have now, as I've already explained earlier about.

Code:

# Assistance Script v0.4

# Binds
bind pub - !alist assistant:list
bind pub - !auser assistant:adduser
bind pub - !duser assistant:deluser
bind pub - !assist assistant:help
bind join - * assistant:greet

# This is where the file is located and stored as $ulist
set ulist "scripts/assistlist.txt"


# This proc greets each user who joins the channel with the following notices.
proc assistant:greet {nick userhost handle chan} {
   
   puthelp   "NOTICE $nick :Welcome to the IRC Support channel $nick!"
   puthelp "NOTICE $nick :If you need assistance, type !assist"
}

# This proc is used to view all users on the list after adding them.
# Each users on this list is saved to a text document known as assistlist.txt
# The variable is set as $ulist, once a user type !ulist in the channel they'll see
# all the users who's added to the list.
proc assistant:list {nick userhost handle chan text} {
   global ulist
   
   # checks if user is not op or not owner
   if {!([isop $nick $chan] || [ishalfop $nick $chan] || [isvoice $nick $chan] || [matchattr $handle +n])} {
      putserv "NOTICE $nick :You're not authorized to use this command."
      putcmdlog "ASSIST INFO: Unauthorized access to !alist by $nick."
      return 0
   }
   # opening the file for read only and set data to read $fp
   set fp [open $ulist "r"]
   set data [read -nonewline $fp]
   close $fp
   
   # set the variable lines to split the data
   # then sort the names in alphabetical order on the list of names.
   set lines [split $data "\n"]
   set line_sort [lsort -dictionary $lines]
   
   # Separate names using a , Example: John, Brown, Paul, Michael
   set lines1 [join $line_sort ", "]
   
   # Notices the user who's on the list. Example: Assistants: John, Brown, Paul, Michael
   putserv "NOTICE $nick :\002Assistants:\002 $lines1"
   putcmdlog "ASSIST INFO: Assistants was viewed by $nick."
   return 0
}

# Adding users to the list of names
proc assistant:adduser {nick userhost handle chan text} {
   global ulist
   
   # Check if the user is not op or owner.
   if {!([isop $nick $chan] || [matchattr $handle +n])} {
      putserv "NOTICE $nick :You're not authorized to perform this command."
      putcmdlog "ASSIST INFO: Unauthorized access to !auser by $nick."
      return 0
   }
   if {$text == ""} {
      putserv "NOTICE $nick :Usage: !auser <nickname>"
      putcmdlog "ASSIST INFO: Usage info was sent to $nick."
      return 0
   } 
   # Sets the "Line_to_add" as the user input after !auser $text
   set line_to_add $text
   set lines_space [join $line_to_add " "]
   set fname $ulist
   set fp [open $fname "a"]
   puts $fp $lines_space
   close $fp
   
   # Notices the user that the name was added to the list
   putquick "NOTICE $nick :$text was added to the Assist List."
   putcmdlog "ASSIST INFO: $nick added $text to the Assist List."
}
}


# This proc is to remove a user from the list
proc assistant:deluser {nick userhost handle chan text} {
   global ulist
   
   # Check if the user is not op or owner.
   if {!([isop $nick $chan] || [matchattr $handle +n])} {
      putserv "NOTICE $nick :You're not authorized to perform this command."
      putcmdlog "ASSIST INFO: Unauthorized access to !duser by $nick."
      return 0
   }
   if {$text == ""} {
      putserv "NOTICE $nick :Usage: !duser <nickname>"
      putcmdlog "ASSIST INFO: Assist usage was sent to $nick."
      return 0
   }
   set fp [open $ulist "r"]
   set data [read -nonewline $fp]
   close $fp
   
   set lines [split $data "\n"]
   
   set el_num [lsearch $lines $text]
   
   if {$el_num != -1} {
      
      set lines [lreplace $lines $el_num $el_num]
   }
   
   puthelp "NOTICE $nick :$text was removed from the Assist List."
   putcmdlog "ASSIST INFO: $nick removed $text from the Assist List."
   
   set fp [open $ulist "w"]
   
   foreach element $lines {
      puts $fp $element
   }
   close $fp
}

# Notifying users on the assist list by pm. Once someone type !assist, this proc is triggered.
proc assistant:help {nick userhost handle chan text} {
   
   global ulist
   
   set fp [open $ulist "r"]
   set data [read -nonewline $fp]
   close $fp
   
   # Splits the data into a list
   set lines [split $data "\n"]
   
   # Arrange the letters alphabetically
   set line_sort [lsort -dictionary $lines]
   
   # Adds a space between names, previous was: Nick1Nick2Nick3Nick3, now it's Nick1 Nick2 Nick3 Nick4
   set lines1 [join $line_to_add " "]
   
   # Split the names from $line1 and place them in a variable $names
   foreach names [split $lines1] {
      if {[onchan $names $chan]} {
         # Check if each names on the list is online on the channel then PRIVMSG them.
         putserv "PRIVMSG $names :\002$nick\002 \00314($userhost)\003 has requested for your assistance on \002$chan\002"
      }
   }
   # Notice the $nick which has issued the !assist command.
   putserv "NOTICE $nick :Thanks for your cooperation \002$nick!\002 Your \037request\037 was sent, please wait for at least 5-15 minutes for a response!"
   putcmdlog "ASSIST INFO: $nick ($userhost) requested for assistance on $chan"
}
putlog "Assistance Script by Kyle (King) has loaded."


The To-Do-List

You can create a completely different script similar to this with what's needed below.

These are already performed by the script.

* Once a user types !assist on the channel, the bot will then PMs all the users on the database all at once.

* The PM is "King (King@userhost.example) has requested for your assistance on #channel" This is the user's info which has triggered the !assist command on the channel.

* The script already consist of a channel flag which was removed, no need to create another channel enable and disable script

* You're able to add and remove users on the list with 2 commands, !auser and !duser.

* The script only PMs online users who's on the list.

* You're able to view all the users on the list with !alist

These are things that's not on the script but needed.

* Be able to view all online user on the list.

* Be able to use one command for adding and removing users, for example: !assistant add <nickname> & !assistant del <nickname>

* Be able to create a spam protection for each specific user who has triggered the !assist command, for example: If a user has triggered the command, he/she won't be able to use it for the next 5-15 minutes. While others can use it, same procedure for each users.

Note: These below are NOT IMPORTANT!

* Users should be able to type !assist or type !assist <reason> which will send each assistants on the list the PM with the reason added.

* Be able to use a command to view the last 5 users who has previously requested for assistance with the !assist command and the time.
Example:
Last 5 Previous Requests:
User: King (King@userhost.example) Time: 3 hours and 27 minutes ago.
User: John (Blake@unaffiliated/John) Time: 3 days and 53 minutes ago.
...

* Be able to view all available commands, if possible, show specific commands to only authorized users, else show available commands to all users.
_________________
Best Regards,
- King
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    egghelp.org community Forum Index -> Script Requests All times are GMT - 4 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Forum hosting provided by Reverse.net

Powered by phpBB © 2001, 2005 phpBB Group
subGreen style by ktauber