diff --git a/.gitignore b/.gitignore index 591fedc..6b8e74d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,7 @@ __pycache__ audio tts-gc-key.json -test.py +/test.py sandbox.py logs.txt config.py diff --git a/Media/__init__.py b/Media/__init__.py index fe6e04c..b9c5289 100644 --- a/Media/__init__.py +++ b/Media/__init__.py @@ -1,63 +1 @@ -from .Film import * -import requests -from bs4 import BeautifulSoup as BS -import os -import Command - -################################################################################ -def findFilm(name): - query = name + ' site:kinogo.by' - responce = requests.get(f'https://www.google.ru/search?&q={query}&lr=lang_ru&lang=ru') - page = BS(responce.content, 'html.parser') - link = page.select_one('.ZINbbc.xpd.O9g5cc.uUPGi>.kCrYT>a') - return link['href'][7:].split('&')[0] if link else None - -def extractUrl(url): - responce = requests.get(url) - page = BS(responce.content, 'html.parser') - url = page.select_one('div[style="padding:22px; float:left; margin-left: 30px;"]>a[download]:last-child') - return url['href'] if url else None - -def startFilm(url): - os.system(f'lxterminal --command="vlc {url}"') - -def main(params): - name = params.get('text') - if name: - if url:= extractUrl(findFilm(name)): - startFilm(url) - voice = text = 'Включаю' - else: - voice = text = 'Не могу найти фильм' - type = 'simple' - else: - voice = text = 'Какой фильм включить?' - type = 'question' - callback = kinogo_cb - - return { - 'type': type, - 'text': text, - 'voice': voice, - 'callback': callback or None, - } - -def start(params): - name = params.get('text') - voice = text = 'Не могу найти фильм' - if name: - if url:= extractUrl(findFilm(name)): - startFilm(url) - voice = text = 'Включаю' - return { - 'type': 'simple', - 'text': text, - 'voice': voice, - } - -kinogo_cb = Command.Callback(['$text',]) -kinogo_cb.setStart(start) - -patterns = ['* включ* фильм $text', '* включ* фильм*'] -kinogo = Film('KinogoPlayer', {}, patterns) -kinogo.setStart(main) +from .kinogo import * diff --git a/Media/kinogo.py b/Media/kinogo.py new file mode 100644 index 0000000..249e655 --- /dev/null +++ b/Media/kinogo.py @@ -0,0 +1,67 @@ +from .Film import * +import requests +from bs4 import BeautifulSoup as BS +import os +import Command +################################################################################ +def findFilm(name): + query = name + ' site:kinogo.by' + responce = requests.get(f'https://www.google.ru/search?&q={query}&lr=lang_ru&lang=ru') + page = BS(responce.content, 'html.parser') + link = page.select_one('.ZINbbc.xpd.O9g5cc.uUPGi>.kCrYT>a') + return link['href'][7:].split('&')[0] if link else None + +def extractUrl(url): + responce = requests.get(url) + page = BS(responce.content, 'html.parser') + url = page.select_one('div[style="padding:22px; float:left; margin-left: 30px;"]>a[download]:last-child') + return url['href'] if url else None + +def startFilm(url): + print(url) + os.system(f'lxterminal --command="vlc {url} -f"') + +def main(params): + name = params.get('text') + if name: + if url:= extractUrl(findFilm(name)): + startFilm(url) + voice = text = 'Включаю' + else: + voice = text = 'Не могу найти фильм' + type = 'simple' + else: + voice = text = 'Какой фильм включить?' + type = 'question' + callback = kinogo_cb + return { + 'type': type, + 'text': text, + 'voice': voice, + 'callback': callback, + } + return { + 'type': type, + 'text': text, + 'voice': voice, + } + +def start(params): + name = params.get('text') + voice = text = 'Не могу найти фильм' + if name: + if url:= extractUrl(findFilm(name)): + startFilm(url) + voice = text = 'Включаю' + return { + 'type': 'simple', + 'text': text, + 'voice': voice, + } + +kinogo_cb = Command.Callback(['$text',]) +kinogo_cb.setStart(start) + +patterns = ['* включ* фильм $text', '* включ* фильм*'] +kinogo = Film('KinogoPlayer', {}, patterns) +kinogo.setStart(main) diff --git a/SmallTalk/__init__.py b/SmallTalk/__init__.py index 8015f57..76c00f2 100644 --- a/SmallTalk/__init__.py +++ b/SmallTalk/__init__.py @@ -19,138 +19,6 @@ # # @background(voice_to_speak, text_for_print) for background methods - - -from .SmallTalk import * -import datetime, time -import math -import requests -from bs4 import BeautifulSoup as BS -################################################################################ -def method(params): - voice = text = 'Привет' - return { - 'type': 'simple', - 'text': text, - 'voice': voice, - } - -patterns = ['* привет* *',] -hello = SmallTalk('Hello', {}, patterns) -hello.setStart(method) -################################################################################ -def method(params): - if city := params.get('text'): - city = city.title() - responce = requests.get(f'https://www.google.ru/search?&q=время+в+{city}&lr=lang_ru&lang=ru') - page = BS(responce.content, 'html.parser') - now = page.select('div.BNeawe>div>div.BNeawe')[0].get_text().split(':') or '' - now = datetime.time(int(now[0]), int(now[1])) - else: - now = datetime.datetime.now() - - hours = now.hour%12 or 12 - minutes = now.minute - get_str = ['десять', 'один', 'два', 'три', 'четыре', 'пять', 'шесть', 'семь', 'восемь', 'девять'] - - if hours%20 == 1: - str_hour = 'час' - elif 5 > hours%20 > 1: - str_hour = 'часа' - else: - str_hour = 'часов' - - if minutes%10 == 1 and 20 9 else '0'+str(now.hour) - minutes = minutes if minutes > 9 else '0'+str(minutes) if minutes else '00' - - if city: text = f'Текущее время в {city}: {hours}:{minutes}' - else: text = f'Текущее время: {hours}:{minutes}' - - return { - 'type': 'simple', - 'text': text, - 'voice': voice, - } - -keywords = { - 10: ['который час', 'сколько времени'], - 5: ['текущее', 'сейчас', 'время'], - 1: ['сколько'] -} -patterns = ['* который * час в $text', '* скольк* * (врем|час)* * в $text', '* время в $text', '* который * час *', '* скольк* * (врем|час)* *'] -subpatterns = ['а (сейчас|в $text)'] -ctime = SmallTalk('Current Time', keywords, patterns, subpatterns) -ctime.setStart(method) -################################################################################ -# Only for tests -@SmallTalk.background(answer = 'Запуск фонового процесса', voice = 'Запускаю фоновый процесс') -def method(params, finish_event): - time.sleep(10) - finish_event.set() - return { - 'text': 'Фоновый процесс завершен', - 'voice': 'Фоновый процесс завершен', - } - - -keywords = { - 10: ['тестирование', 'проверка', 'потоков', 'фоновых', 'процессов'], -} -patterns = ['* [тест|провер]* * [фонов*] * (процесс|поток)* *'] -test = SmallTalk('Test threads', keywords, patterns) -test.setStart(method) -################################################################################ +from .hello import * +from .ctime import * +from .test import * diff --git a/SmallTalk/ctime.py b/SmallTalk/ctime.py new file mode 100644 index 0000000..ee66e42 --- /dev/null +++ b/SmallTalk/ctime.py @@ -0,0 +1,102 @@ +from .SmallTalk import * +import datetime, time +import requests +from bs4 import BeautifulSoup as BS +import math +################################################################################ +def method(params): + if city := params.get('text'): + city = city.title() + responce = requests.get(f'https://www.google.ru/search?&q=время+в+{city}&lr=lang_ru&lang=ru') + page = BS(responce.content, 'html.parser') + now = page.select('div.BNeawe>div>div.BNeawe')[0].get_text().split(':') or '' + now = datetime.time(int(now[0]), int(now[1])) + else: + now = datetime.datetime.now() + + hours = now.hour%12 or 12 + minutes = now.minute + get_str = ['десять', 'один', 'два', 'три', 'четыре', 'пять', 'шесть', 'семь', 'восемь', 'девять'] + + if hours%20 == 1: + str_hour = 'час' + elif 5 > hours%20 > 1: + str_hour = 'часа' + else: + str_hour = 'часов' + + if minutes%10 == 1 and 20 9 else '0'+str(now.hour) + minutes = minutes if minutes > 9 else '0'+str(minutes) if minutes else '00' + + if city: text = f'Текущее время в {city}: {hours}:{minutes}' + else: text = f'Текущее время: {hours}:{minutes}' + + return { + 'type': 'simple', + 'text': text, + 'voice': voice, + } + +keywords = { + 10: ['который час', 'сколько времени'], + 5: ['текущее', 'сейчас', 'время'], + 1: ['сколько'] +} +patterns = ['* который * час в $text', '* скольк* * (врем|час)* * в $text', '* время в $text', '* который * час *', '* скольк* * (врем|час)* *'] +subpatterns = ['а (сейчас|в $text)'] +ctime = SmallTalk('Current Time', keywords, patterns, subpatterns) +ctime.setStart(method) diff --git a/SmallTalk/hello.py b/SmallTalk/hello.py new file mode 100644 index 0000000..597ffc6 --- /dev/null +++ b/SmallTalk/hello.py @@ -0,0 +1,13 @@ +from .SmallTalk import * +################################################################################ +def method(params): + voice = text = 'Привет' + return { + 'type': 'simple', + 'text': text, + 'voice': voice, + } + +patterns = ['* привет* *',] +hello = SmallTalk('Hello', {}, patterns) +hello.setStart(method) diff --git a/SmallTalk/test.py b/SmallTalk/test.py new file mode 100644 index 0000000..36617a0 --- /dev/null +++ b/SmallTalk/test.py @@ -0,0 +1,20 @@ +from .SmallTalk import * +import time +################################################################################ +# Only for tests +@SmallTalk.background(answer = 'Запуск фонового процесса', voice = 'Запускаю фоновый процесс') +def method(params, finish_event): + time.sleep(10) + finish_event.set() + return { + 'text': 'Фоновый процесс завершен', + 'voice': 'Фоновый процесс завершен', + } + + +keywords = { + 10: ['тестирование', 'проверка', 'потоков', 'фоновых', 'процессов'], +} +patterns = ['* [тест|провер]* * [фонов*] * (процесс|поток)* *'] +test = SmallTalk('Test threads', keywords, patterns) +test.setStart(method) diff --git a/telegram_bot.py b/telegram_bot.py index bcb75b7..b368e34 100644 --- a/telegram_bot.py +++ b/telegram_bot.py @@ -35,7 +35,7 @@ def check_threads(threads): def main(id, text): text = text.lower() if Command.isRepeat(text): - reply(memory[0]['responce']); + reply(id, memory[0]['responce']); return if memory: responce = memory[0]['responce']