мега обновление всего на свете.
1. добавил chatgpt 2. многое переписал
This commit is contained in:
@@ -29,6 +29,8 @@ share/python-wheels/
|
||||
*.egg
|
||||
MANIFEST
|
||||
.idea/
|
||||
logs
|
||||
config
|
||||
# PyInstaller
|
||||
# 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.
|
||||
@@ -130,3 +132,4 @@ dmypy.json
|
||||
# Pyre type checker
|
||||
.pyre/
|
||||
|
||||
/logs/
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
from aiogram.utils import executor
|
||||
from loguru import logger
|
||||
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") # создаю объект бота
|
||||
dp = Dispatcher(bot) # создаю объект слушателя
|
||||
@@ -10,14 +10,50 @@ logger.add("logs/logging_log.log", level="INFO") # создаю логер
|
||||
|
||||
|
||||
@dp.message_handler(commands=['start']) # обрабатываю команду start
|
||||
def start(message: types.Message):
|
||||
async def start(message: types.Message):
|
||||
# получаю имя отправителя
|
||||
if message.chat.first_name:
|
||||
name = message.chat.first_name
|
||||
else:
|
||||
name = message.chat.title
|
||||
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']) # обрабатываю голосовые сообщения, кружки, видео
|
||||
|
||||
+12
-9
@@ -20,22 +20,25 @@ class Converter:
|
||||
|
||||
:return: str - текст + служебная информация
|
||||
"""
|
||||
f = -1.0
|
||||
try:
|
||||
try:
|
||||
import 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
|
||||
return self.google() # запуск функции google
|
||||
return self.google(f) # запуск функции google
|
||||
else:
|
||||
self.service = "yandex" # устанавливаем сервис yandex
|
||||
return self.yandex() # запуск функции yandex
|
||||
except: # если какая-то проблема
|
||||
return self.google() # запуск функции google
|
||||
return self.yandex(f) # запуск функции yandex
|
||||
except Exception as e: # если какая-то проблема
|
||||
print(e)
|
||||
return self.google(f) # запуск функции google
|
||||
except sr.RequestError: # обработка ошибки размера файлов
|
||||
return "Толи файл слишком большой, толи с ботом что-то случилось" # возвращение ошибки
|
||||
|
||||
def google(self) -> str:
|
||||
def google(self, f) -> str:
|
||||
"""
|
||||
Функция работающая с stt google
|
||||
|
||||
@@ -52,7 +55,7 @@ class Converter:
|
||||
r.adjust_for_ambient_noise(source) # мини очистка шума
|
||||
try:
|
||||
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) # удаляю лишние файлы
|
||||
return response # возвращаю текст
|
||||
except sr.UnknownValueError: # ошибка распознавания текста
|
||||
@@ -61,7 +64,7 @@ class Converter:
|
||||
except FileNotFoundError: # ошибка файла(из-за веса telegram не пускает)
|
||||
return "Толи файл слишком большой, толи с ботом что-то случилось" # возвращение ошибки
|
||||
|
||||
def yandex(self) -> str:
|
||||
def yandex(self, f) -> str:
|
||||
"""
|
||||
Функция работающая с stt yandex
|
||||
|
||||
@@ -71,6 +74,6 @@ class Converter:
|
||||
reg = ShortAudioRecognition(Session.from_api_key("AQVN3xNJamAFP4_FS6Gis0Uud0vONFk24umBSXvh")) # получаю
|
||||
# объект для расшифровки
|
||||
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) # удаляю лишние файлы
|
||||
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: - объект бота
|
||||
:return: None
|
||||
"""
|
||||
os.system("rm -rf config") # удаляю папку с файлами
|
||||
os.mkdir("config") # создаю папку обратно
|
||||
# достаю file_id из разнообразных полей
|
||||
if message.content_type in ['voice']:
|
||||
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}, "
|
||||
f"сервисом {converter.service}") # записываю всё в logger
|
||||
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 shutil
|
||||
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 file_path: str - путь до файла
|
||||
:param text: str - текст который был разобран
|
||||
:param f: float - длинна аудиофайла
|
||||
:return: None
|
||||
"""
|
||||
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]}") # копирование файла
|
||||
with open(f'logs/{message.chat.id}/{file_name[0]}/{service}-text.txt', 'w+') as the_file: # открываю файл в запись
|
||||
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