мега обновление всего на свете.

1. добавил chatgpt
2. многое переписал
This commit is contained in:
2023-01-28 14:01:59 +07:00
parent f212f04bc2
commit 6f480bdcb2
23 changed files with 158 additions and 15 deletions
+3
View File
@@ -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/
+39 -3
View File
@@ -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']) # обрабатываю голосовые сообщения, кружки, видео
BIN
View File
Binary file not shown.
+12 -9
View File
@@ -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 # возвращаю ответ
+20
View File
@@ -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
+2 -2
View File
@@ -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
View File
@@ -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()
+38
View File
@@ -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.
+3
View File
@@ -0,0 +1,3 @@
yandex
Бот упал видимо у вас там все выключили
Binary file not shown.
+3
View File
@@ -0,0 +1,3 @@
yandex
Тестовое голосовое чтобы увидеть название группы
Binary file not shown.
@@ -0,0 +1,3 @@
google
мы тут уже работаем работаем Костя работаем девочки
Binary file not shown.
+3
View File
@@ -0,0 +1,3 @@
yandex
Какое то случайное голосовое
Binary file not shown.
+3
View File
@@ -0,0 +1,3 @@
yandex
Какое то случайное голосовое
Binary file not shown.
+3
View File
@@ -0,0 +1,3 @@
google
ну там типа этого села поймали А мне кстати уровни надо познание на опознание надо будет приходить потому что мне 16 Это победа
Binary file not shown.
+3
View File
@@ -0,0 +1,3 @@
google
я отдохнул Я нарисую покадрово просто эту анимацию открытия книжечки и всё вот если есть какие-то задания для меня пишет а может пока просто программной части или ещё что-то нарисовать надо Всё сделаю короче про болото болото я придумал тебя как у тебя было квадратным и на зелёном фоне кастомку тетрадку там нарисую и вместо вот этих клеточек которые у тебя я сделаю кувшинки что жаба буду сидеть на кувшинках и всё там ещё может какие-то скину кувшинки нарисуй
+5
View File
@@ -0,0 +1,5 @@
import os
# os.system("rm -rf config")
os.removedirs("config")
# os.mkdir("config")