мега обновление всего на свете.
1. добавил chatgpt 2. многое переписал
This commit is contained in:
@@ -29,6 +29,8 @@ share/python-wheels/
|
|||||||
*.egg
|
*.egg
|
||||||
MANIFEST
|
MANIFEST
|
||||||
.idea/
|
.idea/
|
||||||
|
logs
|
||||||
|
config
|
||||||
# PyInstaller
|
# PyInstaller
|
||||||
# Usually these files are written by a python script from a template
|
# Usually these files are written by a python script from a template
|
||||||
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
||||||
@@ -130,3 +132,4 @@ dmypy.json
|
|||||||
# Pyre type checker
|
# Pyre type checker
|
||||||
.pyre/
|
.pyre/
|
||||||
|
|
||||||
|
/logs/
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
from aiogram.utils import executor
|
from aiogram.utils import executor
|
||||||
from loguru import logger
|
from loguru import logger
|
||||||
from aiogram import Bot, Dispatcher, types
|
from aiogram import Bot, Dispatcher, types
|
||||||
from functions import get_audio_messages_func
|
from functions import get_audio_messages_func, create_statistic, openai_answer
|
||||||
|
|
||||||
bot = Bot(token="5941118321:AAG0g0keLrlnuH_9U9X6ehpFFAdOX38qeXI") # создаю объект бота
|
bot = Bot(token="5941118321:AAG0g0keLrlnuH_9U9X6ehpFFAdOX38qeXI") # создаю объект бота
|
||||||
dp = Dispatcher(bot) # создаю объект слушателя
|
dp = Dispatcher(bot) # создаю объект слушателя
|
||||||
@@ -10,14 +10,50 @@ logger.add("logs/logging_log.log", level="INFO") # создаю логер
|
|||||||
|
|
||||||
|
|
||||||
@dp.message_handler(commands=['start']) # обрабатываю команду start
|
@dp.message_handler(commands=['start']) # обрабатываю команду start
|
||||||
def start(message: types.Message):
|
async def start(message: types.Message):
|
||||||
# получаю имя отправителя
|
# получаю имя отправителя
|
||||||
if message.chat.first_name:
|
if message.chat.first_name:
|
||||||
name = message.chat.first_name
|
name = message.chat.first_name
|
||||||
else:
|
else:
|
||||||
name = message.chat.title
|
name = message.chat.title
|
||||||
logger.info(f"Группа {name} (ID: {message.chat.id}) запустил бота") # записываю в логи
|
logger.info(f"Группа {name} (ID: {message.chat.id}) запустил бота") # записываю в логи
|
||||||
bot.send_message(message.chat.id, 'Привет! Отправляй голосовое, я расшифрую!') # отправляю ответное сообщение
|
await bot.send_message(message.chat.id, 'Привет! Отправляй голосовое, я расшифрую!') # отправляю ответное сообщение
|
||||||
|
|
||||||
|
|
||||||
|
@dp.message_handler(commands=['statistic'])
|
||||||
|
async def statistic(message: types.Message):
|
||||||
|
if message.chat.id != "":
|
||||||
|
for i in create_statistic.create_statistic():
|
||||||
|
await bot.send_message(message.chat.id, i)
|
||||||
|
await bot.delete_message(message.chat.id, message.message_id)
|
||||||
|
else:
|
||||||
|
await bot.delete_message(message.chat.id, message.message_id)
|
||||||
|
await bot.send_message(message.chat.id, "У вас нет прав на просмотр статистики")
|
||||||
|
|
||||||
|
|
||||||
|
@dp.message_handler(commands=['response'])
|
||||||
|
async def answer(message: types.Message):
|
||||||
|
openai_answer.get_response(message)
|
||||||
|
await message.answer_document(open("response_ru.txt", "rb"), reply=True)
|
||||||
|
await message.answer_document(open("resource_ru_not_translate.txt", "rb"), reply=True)
|
||||||
|
|
||||||
|
|
||||||
|
@dp.message_handler(commands=['r'])
|
||||||
|
async def r(message: types.Message):
|
||||||
|
import openai
|
||||||
|
openai.api_key = "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"
|
||||||
|
response = openai.Completion.create(
|
||||||
|
model="text-davinci-003",
|
||||||
|
prompt=' '.join(message.text.split()[1:]),
|
||||||
|
temperature=0.5,
|
||||||
|
max_tokens=1000,
|
||||||
|
top_p=1.0,
|
||||||
|
frequency_penalty=0.5,
|
||||||
|
presence_penalty=0.0
|
||||||
|
)
|
||||||
|
for i in response['choices']:
|
||||||
|
await bot.send_message(message.chat.id, f"ChatGPT\n{i['text']}",
|
||||||
|
parse_mode=None, reply_to_message_id=message.message_id)
|
||||||
|
|
||||||
|
|
||||||
@dp.message_handler(content_types=['voice', 'video_note', 'video']) # обрабатываю голосовые сообщения, кружки, видео
|
@dp.message_handler(content_types=['voice', 'video_note', 'video']) # обрабатываю голосовые сообщения, кружки, видео
|
||||||
|
|||||||
+12
-9
@@ -20,22 +20,25 @@ class Converter:
|
|||||||
|
|
||||||
:return: str - текст + служебная информация
|
:return: str - текст + служебная информация
|
||||||
"""
|
"""
|
||||||
|
f = -1.0
|
||||||
try:
|
try:
|
||||||
try:
|
try:
|
||||||
import mutagen
|
import mutagen
|
||||||
f = mutagen.File(self.path_to_file) # получение данных mutagen
|
f = mutagen.File(self.path_to_file) # получение данных mutagen
|
||||||
if float(f.info.length) >= 30.0: # если длинна больше 30 секунд
|
f = float(f.info.length)
|
||||||
|
if f >= 30.0: # если длинна больше 30 секунд
|
||||||
self.service = "google" # устанавливаю сервис google
|
self.service = "google" # устанавливаю сервис google
|
||||||
return self.google() # запуск функции google
|
return self.google(f) # запуск функции google
|
||||||
else:
|
else:
|
||||||
self.service = "yandex" # устанавливаем сервис yandex
|
self.service = "yandex" # устанавливаем сервис yandex
|
||||||
return self.yandex() # запуск функции yandex
|
return self.yandex(f) # запуск функции yandex
|
||||||
except: # если какая-то проблема
|
except Exception as e: # если какая-то проблема
|
||||||
return self.google() # запуск функции google
|
print(e)
|
||||||
|
return self.google(f) # запуск функции google
|
||||||
except sr.RequestError: # обработка ошибки размера файлов
|
except sr.RequestError: # обработка ошибки размера файлов
|
||||||
return "Толи файл слишком большой, толи с ботом что-то случилось" # возвращение ошибки
|
return "Толи файл слишком большой, толи с ботом что-то случилось" # возвращение ошибки
|
||||||
|
|
||||||
def google(self) -> str:
|
def google(self, f) -> str:
|
||||||
"""
|
"""
|
||||||
Функция работающая с stt google
|
Функция работающая с stt google
|
||||||
|
|
||||||
@@ -52,7 +55,7 @@ class Converter:
|
|||||||
r.adjust_for_ambient_noise(source) # мини очистка шума
|
r.adjust_for_ambient_noise(source) # мини очистка шума
|
||||||
try:
|
try:
|
||||||
response = "google\n\n" + r.recognize_google(audio, language=self.language) # получение текста
|
response = "google\n\n" + r.recognize_google(audio, language=self.language) # получение текста
|
||||||
loging(self.message, "google", wav_file, response) # записываю логи
|
loging(self.message, "google", wav_file, response, f) # записываю логи
|
||||||
os.remove(wav_file) # удаляю лишние файлы
|
os.remove(wav_file) # удаляю лишние файлы
|
||||||
return response # возвращаю текст
|
return response # возвращаю текст
|
||||||
except sr.UnknownValueError: # ошибка распознавания текста
|
except sr.UnknownValueError: # ошибка распознавания текста
|
||||||
@@ -61,7 +64,7 @@ class Converter:
|
|||||||
except FileNotFoundError: # ошибка файла(из-за веса telegram не пускает)
|
except FileNotFoundError: # ошибка файла(из-за веса telegram не пускает)
|
||||||
return "Толи файл слишком большой, толи с ботом что-то случилось" # возвращение ошибки
|
return "Толи файл слишком большой, толи с ботом что-то случилось" # возвращение ошибки
|
||||||
|
|
||||||
def yandex(self) -> str:
|
def yandex(self, f) -> str:
|
||||||
"""
|
"""
|
||||||
Функция работающая с stt yandex
|
Функция работающая с stt yandex
|
||||||
|
|
||||||
@@ -71,6 +74,6 @@ class Converter:
|
|||||||
reg = ShortAudioRecognition(Session.from_api_key("AQVN3xNJamAFP4_FS6Gis0Uud0vONFk24umBSXvh")) # получаю
|
reg = ShortAudioRecognition(Session.from_api_key("AQVN3xNJamAFP4_FS6Gis0Uud0vONFk24umBSXvh")) # получаю
|
||||||
# объект для расшифровки
|
# объект для расшифровки
|
||||||
response = "yandex\n\n" + reg.recognize(open(str(self.path_to_file), str('rb')).read()) # получаю весь текст
|
response = "yandex\n\n" + reg.recognize(open(str(self.path_to_file), str('rb')).read()) # получаю весь текст
|
||||||
loging(self.message, "yandex", self.path_to_file, response) # записываю логи
|
loging(self.message, "yandex", self.path_to_file, response, f) # записываю логи
|
||||||
os.remove(self.path_to_file) # удаляю лишние файлы
|
os.remove(self.path_to_file) # удаляю лишние файлы
|
||||||
return response # возвращаю ответ
|
return response # возвращаю ответ
|
||||||
|
|||||||
@@ -0,0 +1,20 @@
|
|||||||
|
import sqlite3
|
||||||
|
|
||||||
|
|
||||||
|
def create_statistic():
|
||||||
|
conn = sqlite3.connect("db.sql")
|
||||||
|
cur = conn.cursor()
|
||||||
|
# result = cur.execute("SELECT * FROM statistic")
|
||||||
|
# data = cur.execute("select (select count(user_name) from statistic) as count, * from statistic")
|
||||||
|
data = cur.execute("select count(user_id), user_id from statistic")
|
||||||
|
# for i in data:
|
||||||
|
# print(i[1])
|
||||||
|
# print(cur.execute("SELECT * FROM statistic WHERE user_id=?", (i[1], )))
|
||||||
|
# users = []
|
||||||
|
# for i in result:
|
||||||
|
# if i[5] in users:
|
||||||
|
# print(1)
|
||||||
|
# users[users.index(i[5])] += users[users.index(i[5])]
|
||||||
|
# else:
|
||||||
|
# users.append([i[5], 1])
|
||||||
|
return data
|
||||||
@@ -12,6 +12,8 @@ async def get_audio_messages_func(message: types.Message, logger, bot) -> None:
|
|||||||
:param bot: - объект бота
|
:param bot: - объект бота
|
||||||
:return: None
|
:return: None
|
||||||
"""
|
"""
|
||||||
|
os.system("rm -rf config") # удаляю папку с файлами
|
||||||
|
os.mkdir("config") # создаю папку обратно
|
||||||
# достаю file_id из разнообразных полей
|
# достаю file_id из разнообразных полей
|
||||||
if message.content_type in ['voice']:
|
if message.content_type in ['voice']:
|
||||||
file_id = message.voice.file_id
|
file_id = message.voice.file_id
|
||||||
@@ -34,5 +36,3 @@ async def get_audio_messages_func(message: types.Message, logger, bot) -> None:
|
|||||||
logger.info(f"Чат {name} (ID: {message.chat.id}) обработал файл {file_name}, "
|
logger.info(f"Чат {name} (ID: {message.chat.id}) обработал файл {file_name}, "
|
||||||
f"сервисом {converter.service}") # записываю всё в logger
|
f"сервисом {converter.service}") # записываю всё в logger
|
||||||
await bot.send_message(message.chat.id, message_text, reply_to_message_id=message.message_id) # отправляю сообщение
|
await bot.send_message(message.chat.id, message_text, reply_to_message_id=message.message_id) # отправляю сообщение
|
||||||
os.removedirs("config") # удаляю папку с файлами
|
|
||||||
os.mkdir("config") # создаю папку обратно
|
|
||||||
|
|||||||
+18
-1
@@ -1,9 +1,10 @@
|
|||||||
import os
|
import os
|
||||||
import shutil
|
import shutil
|
||||||
from aiogram import types
|
from aiogram import types
|
||||||
|
import sqlite3
|
||||||
|
|
||||||
|
|
||||||
def loging(message: types.Message, service: str, file_path: str, text: str) -> None:
|
def loging(message: types.Message, service: str, file_path: str, text: str, f: float) -> None:
|
||||||
"""
|
"""
|
||||||
Функция логирует каждое сообщение
|
Функция логирует каждое сообщение
|
||||||
|
|
||||||
@@ -11,6 +12,7 @@ def loging(message: types.Message, service: str, file_path: str, text: str) -> N
|
|||||||
:param service: str - название сервиса для генерации
|
:param service: str - название сервиса для генерации
|
||||||
:param file_path: str - путь до файла
|
:param file_path: str - путь до файла
|
||||||
:param text: str - текст который был разобран
|
:param text: str - текст который был разобран
|
||||||
|
:param f: float - длинна аудиофайла
|
||||||
:return: None
|
:return: None
|
||||||
"""
|
"""
|
||||||
if not os.path.isdir(f"logs/{message.chat.id}"): # если папки нет
|
if not os.path.isdir(f"logs/{message.chat.id}"): # если папки нет
|
||||||
@@ -23,3 +25,18 @@ def loging(message: types.Message, service: str, file_path: str, text: str) -> N
|
|||||||
shutil.copy(file_path, f"logs/{message.chat.id}/{file_name[0]}/audio.{file_name[1]}") # копирование файла
|
shutil.copy(file_path, f"logs/{message.chat.id}/{file_name[0]}/audio.{file_name[1]}") # копирование файла
|
||||||
with open(f'logs/{message.chat.id}/{file_name[0]}/{service}-text.txt', 'w+') as the_file: # открываю файл в запись
|
with open(f'logs/{message.chat.id}/{file_name[0]}/{service}-text.txt', 'w+') as the_file: # открываю файл в запись
|
||||||
the_file.write(text) # записываю
|
the_file.write(text) # записываю
|
||||||
|
user_id = message.from_user.id
|
||||||
|
group_id = message.chat.id
|
||||||
|
time = f
|
||||||
|
user_name = message.from_user.first_name
|
||||||
|
if message.chat.first_name:
|
||||||
|
chat_title = message.chat.first_name
|
||||||
|
else:
|
||||||
|
chat_title = message.chat.title
|
||||||
|
print(user_id, group_id, service, time, user_name, chat_title)
|
||||||
|
conn = sqlite3.connect("db.sql")
|
||||||
|
cur = conn.cursor()
|
||||||
|
user = (user_id, group_id, service, time, user_name, chat_title)
|
||||||
|
cur.execute("INSERT INTO statistic(user_id, group_id, service, time, user_name, chat_title) "
|
||||||
|
"VALUES(?, ?, ?, ?, ?, ?);", user)
|
||||||
|
conn.commit()
|
||||||
|
|||||||
@@ -0,0 +1,38 @@
|
|||||||
|
from aiogram import types
|
||||||
|
|
||||||
|
|
||||||
|
def get_response(message: types.Message):
|
||||||
|
answer_en = get_translation(' '.join(message.text.split()[1:]), "en")
|
||||||
|
print(answer_en)
|
||||||
|
response_en = get_response_to_openai(answer_en)
|
||||||
|
print(response_en)
|
||||||
|
response_ru = get_translation(response_en, "ru")
|
||||||
|
resource_ru_not_translate = get_response_to_openai(' '.join(message.text.split()[1:]))
|
||||||
|
save_file(response_ru, resource_ru_not_translate)
|
||||||
|
|
||||||
|
|
||||||
|
def get_translation(text, language):
|
||||||
|
from deep_translator import GoogleTranslator
|
||||||
|
return GoogleTranslator(target=language).translate(text)
|
||||||
|
|
||||||
|
|
||||||
|
def get_response_to_openai(text):
|
||||||
|
import openai
|
||||||
|
openai.api_key = "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"
|
||||||
|
response = openai.Completion.create(
|
||||||
|
model="text-davinci-003",
|
||||||
|
prompt=text,
|
||||||
|
temperature=0.5,
|
||||||
|
max_tokens=1000,
|
||||||
|
top_p=1.0,
|
||||||
|
frequency_penalty=0.5,
|
||||||
|
presence_penalty=0.0
|
||||||
|
)
|
||||||
|
return response['choices'][0]['text']
|
||||||
|
|
||||||
|
|
||||||
|
def save_file(response_ru, resource_ru_not_translate):
|
||||||
|
with open('response_ru.txt', 'w') as f:
|
||||||
|
f.write(response_ru)
|
||||||
|
with open('resource_ru_not_translate.txt', 'w') as f:
|
||||||
|
f.write(resource_ru_not_translate)
|
||||||
Binary file not shown.
@@ -0,0 +1,3 @@
|
|||||||
|
yandex
|
||||||
|
|
||||||
|
Бот упал видимо у вас там все выключили
|
||||||
Binary file not shown.
@@ -0,0 +1,3 @@
|
|||||||
|
yandex
|
||||||
|
|
||||||
|
Тестовое голосовое чтобы увидеть название группы
|
||||||
Binary file not shown.
@@ -0,0 +1,3 @@
|
|||||||
|
google
|
||||||
|
|
||||||
|
мы тут уже работаем работаем Костя работаем девочки
|
||||||
Binary file not shown.
@@ -0,0 +1,3 @@
|
|||||||
|
yandex
|
||||||
|
|
||||||
|
Какое то случайное голосовое
|
||||||
Binary file not shown.
@@ -0,0 +1,3 @@
|
|||||||
|
yandex
|
||||||
|
|
||||||
|
Какое то случайное голосовое
|
||||||
Binary file not shown.
@@ -0,0 +1,3 @@
|
|||||||
|
google
|
||||||
|
|
||||||
|
ну там типа этого села поймали А мне кстати уровни надо познание на опознание надо будет приходить потому что мне 16 Это победа
|
||||||
Binary file not shown.
@@ -0,0 +1,3 @@
|
|||||||
|
google
|
||||||
|
|
||||||
|
я отдохнул Я нарисую покадрово просто эту анимацию открытия книжечки и всё вот если есть какие-то задания для меня пишет а может пока просто программной части или ещё что-то нарисовать надо Всё сделаю короче про болото болото я придумал тебя как у тебя было квадратным и на зелёном фоне кастомку тетрадку там нарисую и вместо вот этих клеточек которые у тебя я сделаю кувшинки что жаба буду сидеть на кувшинках и всё там ещё может какие-то скину кувшинки нарисуй
|
||||||
Reference in New Issue
Block a user