diff --git a/migrations/2016_10_31_01_create_chats_table.py b/migrations/2016_10_31_01_create_chats_table.py new file mode 100644 index 0000000..edab71c --- /dev/null +++ b/migrations/2016_10_31_01_create_chats_table.py @@ -0,0 +1,21 @@ +from orator.migrations import Migration + + +class CreateChatsTable(Migration): + + def up(self): + """ + Run the migrations. + """ + with self.schema.create('chats') as table: + table.increments('id') + table.integer('telegram_id') + table.integer('chat_type') + table.integer('random_chance').default(5) + table.timestamps() + + def down(self): + """ + Revert the migrations. + """ + self.schema.drop('chats') diff --git a/migrations/2016_10_31_02_create_words_table.py b/migrations/2016_10_31_02_create_words_table.py new file mode 100644 index 0000000..f71132f --- /dev/null +++ b/migrations/2016_10_31_02_create_words_table.py @@ -0,0 +1,18 @@ +from orator.migrations import Migration + + +class CreateWordsTable(Migration): + + def up(self): + """ + Run the migrations. + """ + with self.schema.create('words') as table: + table.increments('id') + table.string('word').unique() + + def down(self): + """ + Revert the migrations. + """ + self.schema.drop('words') diff --git a/migrations/2016_10_31_03_create_pairs_table.py b/migrations/2016_10_31_03_create_pairs_table.py new file mode 100644 index 0000000..df60f10 --- /dev/null +++ b/migrations/2016_10_31_03_create_pairs_table.py @@ -0,0 +1,24 @@ +from orator.migrations import Migration + + +class CreatePairsTable(Migration): + + def up(self): + """ + Run the migrations. + """ + with self.schema.create('pairs') as table: + table.increments('id') + table.integer('chat_id').unsigned() + table.foreign('chat_id').references('id').on('chats') + table.integer('first_id').unsigned() + table.foreign('first_id').references('id').on('replies').nullable() + table.integer('second_id').unsigned() + table.foreign('second_id').references('id').on('replies').nullable() + table.timestamp('created_at') + + def down(self): + """ + Revert the migrations. + """ + self.schema.drop('pairs') diff --git a/migrations/2016_10_31_04_create_replies_table.py b/migrations/2016_10_31_04_create_replies_table.py new file mode 100644 index 0000000..cdc7c81 --- /dev/null +++ b/migrations/2016_10_31_04_create_replies_table.py @@ -0,0 +1,23 @@ +from orator.migrations import Migration + + +class CreateRepliesTable(Migration): + + def up(self): + """ + Run the migrations. + """ + with self.schema.create('replies') as table: + table.increments('id') + table.integer('pair_id').unsigned() + table.foreign('pair_id').references('id').on('pairs') + table.integer('word_id').unsigned() + table.foreign('word_id').references('id').on('words').nullable() + table.integer('count').default(1) + table.timestamps() + + def down(self): + """ + Revert the migrations. + """ + self.schema.drop('replies') diff --git a/migrations/__init__.py b/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/orator.py b/orator.py new file mode 100644 index 0000000..8632676 --- /dev/null +++ b/orator.py @@ -0,0 +1,7 @@ +import configparser + + +config = configparser.ConfigParser() +config.read('./main.cfg') + +DATABASES = {'db': config['db']} diff --git a/run.py b/run.py index d63e9d8..f160c21 100644 --- a/run.py +++ b/run.py @@ -5,15 +5,10 @@ from src.bot import Bot def main(): - config = get_config('./main.cfg') + config = configparser.ConfigParser() + config.read('./main.cfg') logging.basicConfig(level=config['logging']['level']) Bot(config).run() - -def get_config(path): - config = configparser.ConfigParser() - config.read(path) - return config - if __name__ == '__main__': main() diff --git a/src/bot.py b/src/bot.py index 1b7a4f4..abe6cb7 100644 --- a/src/bot.py +++ b/src/bot.py @@ -1,13 +1,11 @@ import logging import random import urllib.request -import sqlite3 from telegram.ext import Updater from telegram.ext import MessageHandler, Filters -from orator import DatabaseManager, Model -from src.domain.message import Message - +from orator.orm import Model +from orator import DatabaseManager class Bot: messages = [ @@ -25,28 +23,8 @@ class Bot: self.dispatcher = self.updater.dispatcher Model.set_connection_resolver(DatabaseManager({'db': config['db']})) - self.create_table() - - def create_table(self): - connection = sqlite3.connect(self.config['db']['database']) - cursor = connection.cursor() - cursor.execute('''CREATE TABLE IF NOT EXISTS messages - (id INTEGER PRIMARY KEY, - chat_id text, - user_name text, - user_id text, - payload text, - created_at TIMESTAMP, - updated_at TIMESTAMP)''') - connection.commit() - connection.close() def handler(self, bot, update): - Message.create(chat_id=update.message.chat_id, - user_name=update.message.from_user.username, - user_id=update.message.from_user.id, - payload=update.message.text) - value = random.randint(0, 2) if value == 1: message = random.choice(self.messages) diff --git a/src/domain/chat.py b/src/domain/chat.py new file mode 100644 index 0000000..03b1b96 --- /dev/null +++ b/src/domain/chat.py @@ -0,0 +1,9 @@ +from orator.orm import Model +from orator.orm import has_many +from src.domain.pair import Pair + + +class Chat(Model): + @has_many + def pairs(self): + return Pair diff --git a/src/domain/message.py b/src/domain/message.py deleted file mode 100644 index 9cbac05..0000000 --- a/src/domain/message.py +++ /dev/null @@ -1,6 +0,0 @@ -from orator import Model - - -class Message(Model): - __fillable__ = ['chat_id', 'user_name', 'user_id', 'payload'] - __guarded__ = ['id'] diff --git a/src/domain/pair.py b/src/domain/pair.py new file mode 100644 index 0000000..65a297b --- /dev/null +++ b/src/domain/pair.py @@ -0,0 +1,15 @@ +from orator.orm import Model +from orator.orm import has_many +from orator.orm import belongs_to +from src.domain.reply import Reply +from src.domain.chat import Chat + + +class Pair(Model): + @has_many + def replies(self): + return Reply + + @belongs_to + def chat(self): + return Chat diff --git a/src/domain/reply.py b/src/domain/reply.py new file mode 100644 index 0000000..150302f --- /dev/null +++ b/src/domain/reply.py @@ -0,0 +1,15 @@ +from orator.orm import Model +from orator.orm import belongs_to_many +from orator.orm import belongs_to +from src.domain.pair import Pair +from src.domain.word import Word + + +class Reply(Model): + @belongs_to_many + def pairs(self): + return Pair + + @belongs_to + def word(self): + return Word diff --git a/src/domain/word.py b/src/domain/word.py new file mode 100644 index 0000000..01dce6f --- /dev/null +++ b/src/domain/word.py @@ -0,0 +1,9 @@ +from orator.orm import Model +from orator.orm import has_many +from src.domain.chat import Chat + + +class Word(Model): + @has_many + def chats(self): + return Chat