Compare commits
No commits in common. "april-welcomebot" and "master" have entirely different histories.
april-welc
...
master
|
@ -8,6 +8,4 @@ lib
|
|||
local
|
||||
bin
|
||||
error.log
|
||||
nohup.out
|
||||
nicks.csv
|
||||
bot_settings.py
|
||||
|
|
|
@ -1,10 +1,7 @@
|
|||
#!/usr/bin/python -u
|
||||
# -*- coding: utf-8 -1 -*-
|
||||
|
||||
# Welcome to WelcomeBot. Find source, documentation, etc here: https://github.com/shaunagm/WelcomeBot/ Licensed https://creativecommons.org/licenses/by-sa/2.0/
|
||||
|
||||
# Import some necessary libraries.
|
||||
import socket, sys, time, csv, Queue, random, re, pdb, select, os.path, datetime
|
||||
import socket, sys, time, csv, Queue, random, re, pdb, select, os.path
|
||||
from threading import Thread
|
||||
|
||||
# To configure bot, please make changes in bot_settings.py
|
||||
|
@ -68,7 +65,7 @@ def irc_start(server): # pragma: no cover (this excludes this function from tes
|
|||
return ircsock
|
||||
|
||||
def join_irc(ircsock, botnick, channel):
|
||||
ircsock.send("USER {0} {0} {0} :Robot d'accueil de https://april.org."
|
||||
ircsock.send("USER {0} {0} {0} :This is http://openhatch.org/'s greeter bot"
|
||||
".\n".format(botnick)) # bot authentication
|
||||
ircsock.send("NICK {}\n".format(botnick)) # Assign the nick to the bot.
|
||||
if os.path.isfile("password.txt"):
|
||||
|
@ -83,8 +80,7 @@ def join_irc(ircsock, botnick, channel):
|
|||
def msg_handler(ircsock): # pragma: no cover (this excludes this function from testing)
|
||||
new_msg = ircsock.recv(2048) # receive data from the server
|
||||
new_msg = new_msg.strip('\n\r') # removing any unnecessary linebreaks
|
||||
if new_msg != '':
|
||||
print(datetime.datetime.now().isoformat() + " " + new_msg) #### Potentially make this a log instead?
|
||||
print(new_msg) #### Potentially make this a log instead?
|
||||
return new_msg
|
||||
|
||||
# Called by bot on startup. Builds a regex that matches one of the options + (space) botnick.
|
||||
|
@ -104,21 +100,14 @@ def get_regex(options, botnick):
|
|||
|
||||
# Welcomes the "person" passed to it.
|
||||
def welcome_nick(newcomer, ircsock, channel, channel_greeters):
|
||||
ircsock.send("PRIVMSG {0} :Bonjour {1} Je suis un robot IRC. Ce salon est tranquille actuellement, "
|
||||
"je me permets donc de vous dire bonjour. Je signale à des actifs de l'April "
|
||||
"(comme {2}) que vous êtes là."
|
||||
ircsock.send("PRIVMSG {0} :Welcome {1}! The channel is pretty quiet "
|
||||
"right now, so I thought I'd say hello, and ping some people "
|
||||
"(like {2}) that you're here. If no one responds for a "
|
||||
"while, try emailing us at hello@openhatch.org or just try "
|
||||
"coming back later. FYI, you're now on my list of known "
|
||||
"nicknames, so I won't bother you again."
|
||||
"\n".format(channel, newcomer, greeter_string(channel_greeters)))
|
||||
|
||||
ircsock.send("PRIVMSG {0} :{1} Si personne ne répond d'ici quelques minutes, "
|
||||
"vous pouvez nous envoyer un courriel à contact@april.org (vous recevrez une demande "
|
||||
"de confirmation, merci d'y répondre pour diffuser votre message) ou revenir plus tard."
|
||||
"\n".format(channel, newcomer))
|
||||
|
||||
ircsock.send("PRIVMSG {0} :{1} Vous êtes désormais dans ma liste d'identifiants connus. "
|
||||
"Je ne vous enverrai plus de message."
|
||||
"\n".format(channel, newcomer))
|
||||
|
||||
|
||||
# Checks and manages the status of newcomers.
|
||||
def process_newcomers(bot, newcomerlist, ircsock, channel, greeters, welcome=1):
|
||||
for person in newcomerlist:
|
||||
|
@ -138,7 +127,7 @@ def parse_messages(ircmsg):
|
|||
# Cleans a nickname of decorators/identifiers
|
||||
def clean_nick(actor):
|
||||
if actor: # In case an empty string gets passed
|
||||
if actor.find("april") != -1: # If nick is like "openhatch_1234" don't clean.
|
||||
if actor.find("openhatch") != -1: # If nick is like "openhatch_1234" don't clean.
|
||||
return actor
|
||||
actor = actor.replace("_", "") # Strip out trailing _ characters
|
||||
while(actor[-1]) in "1234567890": # Remove trailing numbers
|
||||
|
@ -209,9 +198,9 @@ def greeter_string(greeters):
|
|||
if len(greeters) > 2:
|
||||
for name in greeters[:-1]:
|
||||
greeterstring += "{}, ".format(name)
|
||||
greeterstring += "et {}".format(greeters[-1])
|
||||
greeterstring += "and {}".format(greeters[-1])
|
||||
elif len(greeters) == 2:
|
||||
greeterstring = "{0} et {1}".format(greeters[0], greeters[1])
|
||||
greeterstring = "{0} and {1}".format(greeters[0], greeters[1])
|
||||
else:
|
||||
greeterstring = greeters[0]
|
||||
return greeterstring
|
||||
|
@ -243,7 +232,6 @@ def pong(ircsock, ircmsg):
|
|||
##########################
|
||||
|
||||
def main():
|
||||
print datetime.datetime.now().isoformat() + " WelcomeBot starting…"
|
||||
ircsock = irc_start(settings.server)
|
||||
join_irc(ircsock, settings.botnick, settings.channel)
|
||||
WelcomeBot = Bot()
|
||||
|
@ -251,13 +239,10 @@ def main():
|
|||
ready_to_read, b, c = select.select([ircsock],[],[], 1) # b&c are ignored here
|
||||
process_newcomers(WelcomeBot, [i for i in WelcomeBot.newcomers if i.around_for() > WelcomeBot.wait_time], ircsock,settings.channel, settings.channel_greeters)
|
||||
if ready_to_read:
|
||||
last_read = datetime.datetime.utcnow()
|
||||
ircmsg = msg_handler(ircsock) # gets message from ircsock
|
||||
ircmsg, actor = parse_messages(ircmsg) # parses it or returns None
|
||||
if ircmsg is not None: # If we were able to parse it
|
||||
message_response(WelcomeBot, ircmsg, actor, ircsock, settings.channel, settings.channel_greeters) # Respond to the parsed message
|
||||
if datetime.datetime.utcnow() - last_read > datetime.timedelta(minutes=10):
|
||||
raise Exception('timeout: nothing to read on socket since 10 minutes')
|
||||
|
||||
if __name__ == "__main__": # This line tells the interpreter to only execute main() if the program is being run, not imported.
|
||||
sys.exit(main())
|
|
@ -1,21 +0,0 @@
|
|||
# -*- coding: utf-8 -1 -*-
|
||||
# Replace these default settings with your own personal settings
|
||||
|
||||
# IRC configuration
|
||||
channel = "#april-accueil"
|
||||
botnick = "bot_d_accueil"
|
||||
server = "irc.freenode.net"
|
||||
registered = False
|
||||
|
||||
# Bot behavior
|
||||
wait_time = 60
|
||||
channel_greeters = ["madix", "cioccolisa", "cpm_screen", "lonugem" ]
|
||||
nick_source = "nicks.csv"
|
||||
|
||||
# Bot text
|
||||
hello_list = ["hello", "yo", "bonjour", "salut"]
|
||||
help_list = ["help", "info", "faq", "explain_yourself", "aide"]
|
||||
|
||||
# Bot welcome message. In fact, never used.
|
||||
welcome_message = "Welcome! The channel is pretty quiet right now, so I thought I'd say hello, and ping some people that you're here. If no one responds for a whle, try emailing us at contact@april.org or just try coming back later. FYI, you're now on my list of known nicknames, so I won't bother you again."
|
||||
|
|
@ -1 +0,0 @@
|
|||
/etc/welcomebot/bot_settings.py
|
|
@ -0,0 +1,17 @@
|
|||
# Replace these default settings with your own personal settings
|
||||
|
||||
# IRC configuration
|
||||
channel = "#openhatch"
|
||||
botnick = "welcomebot"
|
||||
server = "irc.freenode.net"
|
||||
registered = False
|
||||
|
||||
# Bot behavior
|
||||
wait_time = 60
|
||||
channel_greeters = ["shauna", "paulproteus", "marktraceur"]
|
||||
nick_source = "nicks.csv"
|
||||
|
||||
# Bot text
|
||||
hello_list = ["hello", "hi", "hey", "yo", "sup"]
|
||||
help_list = ["help", "info", "faq", "explain_yourself"]
|
||||
welcome_message = "Welcome! The channel is pretty quiet right now, so I thought I'd say hello, and ping some people that you're here. If no one responds for a whle, try emailing us at hello@openhatch.org or just try coming back later. FYI, you're now on my list of known nicknames, so I won't bother you again."
|
|
@ -1,49 +0,0 @@
|
|||
#! /bin/sh
|
||||
#
|
||||
### BEGIN INIT INFO
|
||||
# Provides: welcomebot
|
||||
# Required-Start: $remote_fs $syslog $local_fs $network
|
||||
# Required-Stop: $remote_fs $syslog $local_fs $network
|
||||
# Default-Start: 2 3 4 5
|
||||
# Default-Stop: 0 1 6
|
||||
# Short-Description: Bot irc de l'April.
|
||||
# Description: welcomebt est un bot irc, il est ici installé pour son pluging
|
||||
# MeetBot qui sert à réaliser des rapports de réunion.
|
||||
### END INIT INFO
|
||||
|
||||
PATH=/sbin:/bin:/usr/sbin:/usr/bin
|
||||
DAEMON=/srv/welcomebot/git/bot.sh
|
||||
NAME=welcomebot
|
||||
DESC=welcomebot
|
||||
|
||||
test -f $DAEMON || exit 0
|
||||
|
||||
set -e
|
||||
|
||||
case "$1" in
|
||||
start)
|
||||
echo -n "Starting $DESC: "
|
||||
start-stop-daemon --start --quiet --make-pidfile --pidfile /var/run/$NAME.pid \
|
||||
--chuid welcomebot --exec $DAEMON -- --daemon $DAEMON \
|
||||
|| return 2
|
||||
echo "$NAME."
|
||||
;;
|
||||
stop)
|
||||
echo -n "Stopping $DESC: "
|
||||
rm -f /var/run/$NAME.pid
|
||||
pkill -9 -f bot.py
|
||||
echo "$NAME."
|
||||
;;
|
||||
restart)
|
||||
$0 stop
|
||||
$0 start
|
||||
;;
|
||||
*)
|
||||
echo "Usage: $0 {start|stop|restart}" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
exit 0
|
||||
|
||||
|
|
@ -1,15 +0,0 @@
|
|||
[Unit]
|
||||
Description=APRIL IRC bot for april-accueil channel
|
||||
After=network-online.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
WorkingDirectory=/srv/welcomebot/git
|
||||
ExecStart=/srv/welcomebot/bin/welcomebot.py
|
||||
User=welcomebot
|
||||
Group=welcomebot
|
||||
Restart=always
|
||||
RestartSec=10
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
|
@ -1,13 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
BINDIR="`dirname "$0"`"
|
||||
HOMEDIR="`dirname "$BINDIR"`"
|
||||
|
||||
echo "BINDIR=$BINDIR"
|
||||
echo "HOMEDIR=$HOMEDIR"
|
||||
|
||||
cd "$BINDIR"
|
||||
|
||||
#nohup /srv/welcomebot/git/bot.py >> /dev/null 2>>../welcomebot.log &
|
||||
|
||||
nohup "$BINDIR/welcomebot.py" > /dev/null 2>>"$HOMEDIR/welcomebot.log" &
|
Loading…
Reference in New Issue