remove django-environ and more work on irc bot

This commit is contained in:
Thomas Steen Rasmussen 2017-01-31 22:50:28 +01:00
parent 57c6037e37
commit ea14ae5e38
11 changed files with 211 additions and 107 deletions

View file

@ -1,36 +0,0 @@
### set database url and allowed_hosts here
DATABASE_URL=postgres://username:password@host:port/database
ALLOWED_HOSTS=localhost,127.0.0.1
DEBUG=True
### changes below here are only needed for production
SECRET_KEY=somethingverysecretandunique
EMAIL_HOST='mailhost.example.com'
EMAIL_PORT=587
EMAIL_HOST_USER='mymailuser'
EMAIL_HOST_PASSWORD='mymailpassword'
EMAIL_USE_TLS=True
DEFAULT_FROM_EMAIL='noreply@example.com'
ARCHIVE_EMAIL='archive@example.com'
ADMINS=(
('bornhack sysadm', 'sysadm@bornhack.org'),
)
EPAY_MERCHANT_NUMBER=123
EPAY_MD5_SECRET='abc'
TICKET_CATEGORY_ID='304e9b44-0b48-472d-a05b-963e52614a69'
COINIFY_API_KEY='123'
COINIFY_API_SECRET='123'
COINIFY_IPN_SECRET='123'
PDF_LETTERHEAD_FILENAME='letterhead.pdf'
MEDIA_ROOT='/path/to/media/root/outside/django/root/'
BANKACCOUNT_IBAN='123'
BANKACCOUNT_SWIFTBIC='123'
BANKACCOUNT_REG='123'
BANKACCOUNT_ACCOUNT='123'
TIME_ZONE='Europe/Copenhagen'
SCHEDULE_MIDNIGHT_OFFSET_HOURS=6
SCHEDULE_TIMESLOT_LENGTH_MINUTES=30

View file

@ -0,0 +1,65 @@
# make this a long 100+ chars random string
SECRET_KEY = 'secret'
# debug settings - remember to set allowed_hosts if debug is disabled
DEBUG = True
ALLOWED_HOSTS = ['localhost', '127.0.0.1']
# Database settings
# https://docs.djangoproject.com/en/1.10/ref/settings/#databases
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'bornhackdb',
'USER': 'bornhack',
'PASSWORD': 'bornhack',
'HOST': '127.0.0.1',
},
}
### changes below here are only needed for production
# email settings
EMAIL_HOST='mailhost.example.com'
EMAIL_PORT=587
EMAIL_HOST_USER='mymailuser'
EMAIL_HOST_PASSWORD='mymailpassword'
EMAIL_USE_TLS=True
DEFAULT_FROM_EMAIL='noreply@example.com'
ARCHIVE_EMAIL='archive@example.com'
ADMINS=(
('sysadm', 'sysadm@example.com')
)
# misc settings
TIME_ZONE='Europe/Copenhagen'
MEDIA_ROOT='/path/to/media/root/outside/django/root/'
PDF_ARCHIVE_PATH='/usr/local/www/pdf_archive/'
# PSP settings
EPAY_MERCHANT_NUMBER=123
EPAY_MD5_SECRET='abc'
COINIFY_API_KEY='123'
COINIFY_API_SECRET='123'
COINIFY_IPN_SECRET='123'
# shop settings
PDF_LETTERHEAD_FILENAME='letterhead.pdf'
BANKACCOUNT_IBAN='123'
BANKACCOUNT_SWIFTBIC='123'
BANKACCOUNT_REG='123'
BANKACCOUNT_ACCOUNT='123'
# schedule settings
SCHEDULE_MIDNIGHT_OFFSET_HOURS=6
SCHEDULE_TIMESLOT_LENGTH_MINUTES=30
# irc bot settings
IRCBOT_CHECK_MESSAGE_INTERVAL_SECONDS=60
IRCBOT_NICK='BornHack'
IRCBOT_SCHEDULE_ANNOUNCE_CHANNEL='#test'
IRCBOT_SERVER_HOSTNAME='ircd.tyknet.dk'
IRCBOT_SERVER_PORT=6697
IRCBOT_SERVER_USETLS=True

View file

@ -0,0 +1,65 @@
# make this a long 100+ chars random string
SECRET_KEY = 'secret'
# debug settings - remember to set allowed_hosts if debug is disabled
DEBUG = True
ALLOWED_HOSTS = ['localhost', '127.0.0.1']
# Database settings
# https://docs.djangoproject.com/en/1.10/ref/settings/#databases
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'bornhackdb',
'USER': 'bornhack',
'PASSWORD': 'bornhack',
'HOST': '127.0.0.1',
},
}
### changes below here are only needed for production
# email settings
EMAIL_HOST='mailhost.example.com'
EMAIL_PORT=587
EMAIL_HOST_USER='mymailuser'
EMAIL_HOST_PASSWORD='mymailpassword'
EMAIL_USE_TLS=True
DEFAULT_FROM_EMAIL='noreply@example.com'
ARCHIVE_EMAIL='archive@example.com'
ADMINS=(
('sysadm', 'sysadm@example.com')
)
# misc settings
TIME_ZONE='Europe/Copenhagen'
MEDIA_ROOT='/path/to/media/root/outside/django/root/'
PDF_ARCHIVE_PATH='/usr/local/www/pdf_archive/'
# PSP settings
EPAY_MERCHANT_NUMBER=123
EPAY_MD5_SECRET='abc'
COINIFY_API_KEY='123'
COINIFY_API_SECRET='123'
COINIFY_IPN_SECRET='123'
# shop settings
PDF_LETTERHEAD_FILENAME='letterhead.pdf'
BANKACCOUNT_IBAN='123'
BANKACCOUNT_SWIFTBIC='123'
BANKACCOUNT_REG='123'
BANKACCOUNT_ACCOUNT='123'
# schedule settings
SCHEDULE_MIDNIGHT_OFFSET_HOURS=6
SCHEDULE_TIMESLOT_LENGTH_MINUTES=30
# irc bot settings
IRCBOT_CHECK_MESSAGE_INTERVAL_SECONDS=60
IRCBOT_NICK='BornHack'
IRCBOT_SCHEDULE_ANNOUNCE_CHANNEL='#test'
IRCBOT_SERVER_HOSTNAME='ircd.tyknet.dk'
IRCBOT_SERVER_PORT=6697
IRCBOT_SERVER_USETLS=True

View file

@ -1,8 +1,5 @@
import os
import environ
env = environ.Env()
environ.Env.read_env()
from .environment_settings import *
def local_dir(entry):
return os.path.join(
@ -13,15 +10,9 @@ def local_dir(entry):
WSGI_APPLICATION = 'bornhack.wsgi.application'
ROOT_URLCONF = 'bornhack.urls'
SECRET_KEY = env('SECRET_KEY')
ALLOWED_HOSTS = env('ALLOWED_HOSTS').split(',')
SITE_ID = 1
DATABASES = {
'default': env.db(),
}
ADMINS = (
('bornhack sysadm', 'sysadm@bornhack.org'),
)
@ -54,9 +45,7 @@ INSTALLED_APPS = [
STATIC_URL = '/static/'
STATIC_ROOT = local_dir('static')
STATICFILES_DIRS = [local_dir('static_src')]
MEDIA_ROOT = env('MEDIA_ROOT')
LANGUAGE_CODE = 'en-us'
TIME_ZONE = env('TIME_ZONE')
#USE_I18N = True
#USE_L10N = True
USE_TZ = True
@ -84,18 +73,6 @@ TEMPLATES = [
},
]
MIDDLEWARE_CLASSES = [
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
]
LOGIN_REDIRECT_URL = 'profiles:detail'
AUTHENTICATION_BACKENDS = (
@ -118,38 +95,10 @@ BOOTSTRAP3 = {
'javascript_url': '/static/js/bootstrap.min.js'
}
EPAY_MERCHANT_NUMBER = env('EPAY_MERCHANT_NUMBER')
EPAY_MD5_SECRET = env('EPAY_MD5_SECRET')
COINIFY_API_KEY = env('COINIFY_API_KEY')
COINIFY_API_SECRET = env('COINIFY_API_SECRET')
COINIFY_IPN_SECRET = env('COINIFY_IPN_SECRET')
LETTERHEAD_PDF_PATH = os.path.join(local_dir('static_src'), 'pdf', env('PDF_LETTERHEAD_FILENAME'))
PDF_ARCHIVE_PATH='/usr/local/www/pdf_archive/'
BANKACCOUNT_IBAN = env('BANKACCOUNT_IBAN')
BANKACCOUNT_SWIFTBIC = env('BANKACCOUNT_SWIFTBIC')
BANKACCOUNT_REG = env('BANKACCOUNT_REG')
BANKACCOUNT_ACCOUNT = env('BANKACCOUNT_ACCOUNT')
TICKET_CATEGORY_ID = env('TICKET_CATEGORY_ID')
DEBUG = env('DEBUG')
if DEBUG:
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
INSTALLED_APPS += ['debug_toolbar', ]
MIDDLEWARE_CLASSES += ['debug_toolbar.middleware.DebugToolbarMiddleware', ]
else:
EMAIL_HOST = env('EMAIL_HOST')
EMAIL_PORT = env('EMAIL_PORT')
EMAIL_HOST_USER = env('EMAIL_HOST_USER')
EMAIL_HOST_PASSWORD = env('EMAIL_HOST_PASSWORD')
EMAIL_USE_TLS = env('EMAIL_USE_TLS')
DEFAULT_FROM_EMAIL = env('DEFAULT_FROM_EMAIL')
SERVER_EMAIL = env('DEFAULT_FROM_EMAIL')
ARCHIVE_EMAIL = env('ARCHIVE_EMAIL')
MIDDLEWARE = ['debug_toolbar.middleware.DebugToolbarMiddleware']
LOGGING = {
'version': 1,
@ -173,7 +122,3 @@ LOGGING = {
}
}
# schedule settings
SCHEDULE_MIDNIGHT_OFFSET_HOURS=int(env('SCHEDULE_MIDNIGHT_OFFSET_HOURS'))
SCHEDULE_TIMESLOT_LENGTH_MINUTES=int(env('SCHEDULE_TIMESLOT_LENGTH_MINUTES'))

View file

@ -1,3 +1,5 @@
from django.contrib import admin
from .models import *
admin.site.register(OutgoingIrcMessage)
# Register your models here.

View file

@ -63,29 +63,39 @@ class Plugin(object):
if settings.DEBUG:
print("inside on_kick(), kwargs: %s" % kwargs)
###############################################################################################
### custom irc3 methods
@irc3.extend
def get_outgoing_messages(self):
"""
This method gets unprocessed OutgoingIrcMessage objects and attempts to send them to
the target channel. Messages are skipped if the bot is not in the channel.
"""
# TODO: handle privmsg to users
# TODO: set a timeout for messages.. a few minutes maybe?
# TODO: make sleep time configurable
print("inside get_outgoing_messages()")
for msg in OutgoingIrcMessage.objects.filter(processed=False).order_by('created_date'):
# if this message expired mark it as expired and processed without doing anything
if msg.timeout < timezone.now():
# this message is expired
msg.expired=True
msg.processed=True
msg.save()
continue
# is this message for a channel or a nick?
if msg.target[0] == "#" and msg.target in self.bot.channels:
print("sending privmsg to %s: %s" % (msg.target, msg.message))
self.bot.privmsg(msg.target, msg.message)
msg.processed=True
msg.save()
elif msg.target:
self.bot.privmsg(msg.target, msg.message)
msg.processed=True
msg.save()
else:
print("skipping message to channel %s because the bot is not in the channel" % msg.target)
print("skipping message to %s" % msg.target)
# call this function again in 60 seconds
self.bot.loop.call_later(60, self.bot.get_outgoing_messages)
self.bot.loop.call_later(settings.IRCBOT_CHECK_MESSAGE_INTERVAL_SECONDS, self.bot.get_outgoing_messages)

View file

@ -16,11 +16,11 @@ class Command(BaseCommand):
self.output('IRC bot worker running...')
# connect to IRC
config = {
'nick': 'BornHack',
'autojoins': ['#tirsdagsfilm'],
'host': 'ircd.tyknet.dk',
'port': 6697,
'ssl': True,
'nick': settings.IRCBOT_NICK,
'autojoins': [settings.IRCBOT_SCHEDULE_ANNOUNCE_CHANNEL],
'host': settings.IRCBOT_SERVER_HOSTNAME,
'port': settings.IRCBOT_SERVER_PORT,
'ssl': settings.IRCBOT_SERVER_USETLS,
'timeout': 30,
'includes': [
'ircbot.irc3module',

View file

@ -0,0 +1,23 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.10.5 on 2017-01-31 17:49
from __future__ import unicode_literals
import datetime
from django.db import migrations, models
from django.utils.timezone import utc
class Migration(migrations.Migration):
dependencies = [
('ircbot', '0001_initial'),
]
operations = [
migrations.AddField(
model_name='outgoingircmessage',
name='timeout',
field=models.DateTimeField(default=datetime.datetime(2017, 1, 31, 17, 49, 36, 925459, tzinfo=utc)),
preserve_default=False,
),
]

View file

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.10.5 on 2017-01-31 20:03
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('ircbot', '0002_outgoingircmessage_timeout'),
]
operations = [
migrations.AddField(
model_name='outgoingircmessage',
name='expired',
field=models.BooleanField(default=False),
),
]

View file

@ -1,4 +1,4 @@
from django.core.exceptions import ValidationError
from utils.models import UUIDModel, CreatedUpdatedModel
from django.db import models
@ -7,4 +7,15 @@ class OutgoingIrcMessage(CreatedUpdatedModel):
target = models.CharField(max_length=100)
message = models.CharField(max_length=200)
processed = models.BooleanField(default=False)
timeout = models.DateTimeField()
expired = models.BooleanField(default=False)
def __str__(self):
return "PRIVMSG %s %s (%s)" % (self.target, self.message, 'processed' if self.processed else 'unprocessed')
def clean(self):
if not self.pk:
# this is a new outgoing message being saved
if self.timeout < timezone.now():
raise ValidationError({'timeout': 'The timeout can not be in the past'})

View file

@ -11,7 +11,6 @@ django-allauth==0.30.0
django-bleach==0.3.0
django-bootstrap3==8.1.0
django-debug-toolbar==1.6
django-environ==0.4.1
django-wkhtmltopdf==3.1.0
docopt==0.6.2
future==0.16.0