Уведомления

Группа в Telegram: @pythonsu

Уведомления

  • Found 3480 posts.

Python для экспертов » работа с ctypes dll fortran » Апрель 3, 2023 13:40:42

Добрый день. Есть библиотека на фортране. Получили dll всех функций.
Есть функция
REAL*8 FUNCTION DGAUSS (F,A,B,EPS)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION W(12),X(12)
EXTERNAL F
Первым параметром идет вызов функции F
DOUBLE PRECISION FUNCTION F(X)
IMPLICIT REAL*8 (A-H,O-Z)
FCOS(X)**2
RETURN
END
Мне надо функцию DGAUSS использовать из Python.
Каким образом мне можно передать первый параметр, не могу найти ответ, и можно ли ?.
Нашла такой вариант, передача названия и длина 1 ,но он не работает.


 from ctypes import *
DLL = cdll.LoadLibrary('D103')
print(DLL)
DLL.dgauss_.argtypes = [POINTER(c_wchar_p),POINTER(c_int),POINTER(c_double), POINTER(c_double), POINTER(c_double)]
DLL.dgauss_.restype = c_double
DOBType = c_double
input1 = DOBType(1.0)
input2 = DOBType(2.0)
input3= DOBType(0.0)
order = c_wchar_p('f') 
num=c_int(1)
rez= DLL.dgauss_(order,num,input1,input2, input3)
print('  TEST PROGRAM D103 (DGAUSS)')
print(rez)
Кто знаком с этим, посоветуйте пожалуйста.
С уважением Л.В.

Центр помощи » Помогите доделать калькулятор » Март 31, 2023 20:45:35

 from tkinter import *
from decimal import *
root = Tk()
fr = Frame(root)
fr_but = Frame(root)
fr1 = Frame(root)
def pr_nt(set):
ent.insert(END,set)
def stir():
ent.delete(0,END)
ent = Entry(fr, text = 0, width=15,justify=CENTER)
b = Button(fr_but,width=1,height=1,text='1')
b1 = Button(fr_but,width=1,height=1,text='2')
b2 = Button(fr_but,width=1,height=1,text='3')
b3 = Button(fr_but,width=1,height=1,text='4')
b4 = Button(fr_but,width=1,height=1,text='5')
b5 = Button(fr_but,width=1,height=1,text='6')
b6 = Button(fr_but,width=1,height=1,text='7')
b7 = Button(fr_but,width=1,height=1,text='8')
b8 = Button(fr_but,width=1,height=1,text='9')
b9 = Button(fr_but,width=1,height=1,text='0')
b10 = Button(fr_but,width=1,height=1,text='/')
b11 = Button(fr_but,width=1,height=1,text='*')
b12 = Button(fr_but,width=1,height=1,text='-')
b13 = Button(fr_but,width=1,height=1,text='+')
b14 = Button(fr_but,width=1,height=1,text='=')
b15 = Button(fr_but,width=1,height=1,text='C', command=stir)
b.bind('<Button-1>', lambda event: pr_nt(1))
b1.bind('<Button-1>', lambda event: pr_nt(2))
b2.bind('<Button-1>', lambda event: pr_nt(3))
b3.bind('<Button-1>', lambda event: pr_nt(4))
b4.bind('<Button-1>', lambda event: pr_nt(5))
b5.bind('<Button-1>', lambda event: pr_nt(6))
b6.bind('<Button-1>', lambda event: pr_nt(7))
b7.bind('<Button-1>', lambda event: pr_nt(8))
b8.bind('<Button-1>', lambda event: pr_nt(9))
b9.bind('<Button-1>', lambda event: pr_nt(0))
b10.bind('<Button-1>')
b11.bind('<Button-1>')
b12.bind('<Button-1>')
b13.bind('<Button-1>')
b14.bind('<Button-1>')
b15.bind('<Button-1>')
fr.pack()
ent.pack()
fr_but.pack()
b6.grid(row=0,column=0)
b7.grid(row=0,column=1)
b8.grid(row=0,column=2)
b3.grid(row=1,column=0)
b4.grid(row=1,column=1)
b5.grid(row=1,column=2)
b.grid(row=2,column=0)
b1.grid(row=2,column=1)
b2.grid(row=2,column=2)
b9.grid(row=3,column=1)
b10.grid(row=0,column=3)
b11.grid(row=1,column=3)
b12.grid(row=2,column=3)
b13.grid(row=3,column=3)
b14.grid(row=3,column=2)
b15.grid(row=3,column=0)
fr1.pack()
root.mainloop()


Доделайте калькулятор на основе этого пожалуйста

Python для новичков » помощь по авторизации » Март 22, 2023 19:01:18

Добрый вечер!
Помогите пожалуйста с кодом на Python, согласно описанию, как получить значения переменных:

Формат дат
Даты должны обязательно быть в формате IMF-fixdate, согласно RFC 7231
Nonce в вычислениях
Дата преобразовывается в Base-64 строку, согласно RFC 7616
Действительность запросов

За имлементацию Digest следует принять последний RFC 7616, где:
HA1 = SHA256(“{username}:{realm}:{password}”)
HA2 = SHA256(“{method}:{rel-uri}”)
nonce=base64(current date)
response = SHA256(“{HA1}:{nonce}:{HA2}”)

Python для экспертов » Какие самые лучшие языковые модели аналог GPT-3? которые можно грузить использовать on premise?  » Март 20, 2023 10:27:32

Какие самые лучшие языковые модели аналог GPT-3? которые можно грузить использовать on premise?

Python для новичков » Вклинить отправление картинки в бот для Discord » Март 16, 2023 22:36:10

Приветствую. Я понимаю, что сейчас буду выглядеть как фрик, но не издевайтесь пожалуйста, ахах. Я только неделю изучаю Python, хочу и наверняка буду разбираться во всём со временем, но сейчас я полный ноль. Где-то в интернете нашёл код на бота для дискорда (как мне уже сказали, очень кривой код и хз как он работает), но он работает. В общем, принцип такой: запускается .py, вводишь токен, ссылку на канал и время в секундах сколько будет пауза между сообщениями.
Со своим минимальным пониманием что там вообще написано, я пытался ковыряться, но ничего не работает. Когда я добавляю что-то своё в код, программа даже не запускается.

Какая задача стоит: сделать так, чтобы при запуске программы она сразу же начала спамить в канал с уже указанным таймингом в 1860 секунд, либо нужно было нажать всего 1 кнопку для этого. (Грубо говоря, чтобы в самом коде уже был прописан токен, ссылка и тайминг). Я пытался кидать ссылку на картинку в файлик “MSG.txt”, но это очень некрасиво выглядит в самом сообщении и чаще всего даже картинка не появляется, только ссылка. Я видел что можно через код добавить ссылку на картинку которая сохранена на компьютер, но я так к сожалению и не разобрался как этот код вклинить в программу. Нужно чтобы отправлялось сообщение из MSG.txt вместе с картинкой, воот..

И правда, если я сейчас выгляжу нагло и тупо, не кидайтесь камнями пожалуйста. Я впервые вообще взаимодействую со всей этой сферой и не знаю что и как у вас тут устроено, кроме одного - что таких типов как я не особо любят Заранее спасибо за понимание и помощь (если конечно будет желание и возможность помочь).

 from random import choice
import requests as r
import time
s = r.Session()
s.headers['authorization'] = input('Token: ')
fname = 'msg.txt'
with open(fname, encoding='utf-8') as fin:
    text = fin.read()
chat_id = input('Input chat id: ')
delay = int(input('Delay between messages in seconds: '))
total_sent = 0
while True:
    try:
        msg = text
        print(f'Sending message {msg}')
        _data = {'content': msg, 'tts': False}
        resp = s.post(
            f'https://discord.com/api/v9/channels/{chat_id}/messages', json=_data).json()
        msg_id = resp['id']
        total_sent += 1
        print(f'Message sent (Already {total_sent} in total).')
        print(f'Sleeping {delay} seconds')
        time.sleep(delay)
    except Exception as e:
        print(f'Some error: {e}')
        time.sleep(20)]

Python для новичков » Постепенная анимация роста » Март 16, 2023 15:17:32

Здравствуйте, нужно сделать чтобы при открытие программы, показывало видео, на котором растёт дерево, при запуске рост достигает 1 стадии, при нажатие кнопки, чтобы дерево еще больше выросло, еще раз нажать на кнопку, еще больше выросло, и так 10 раз. Реализовал с помощью tkinter, но при нажатие кнопки картинка мигает, появляется белый фон на секунду, что не очень красиво выглядит

 from tkinter import *
from tkVideoPlayer import TkinterVideo
num = 1
home = Tk()
home.geometry("500x500+500+200")
home.title("1 LVL")
videoplayer = TkinterVideo(master=home, scaled=True)
def print_key(event):
    global num
    args = event.keysym, event.keycode, event.char
    print("Знак: {}, Код: {}, Символ: {}".format(*args))
    if event.keycode == 87: # KEY   W
        if num != 10:
            num += 1
            home.title(f"{num} LVL")
            play_video(num)
    elif event.keycode == 83: # KEY   S
        if num != 1:
            num -= 1
            home.title(f"{num} LVL")
            play_video(num)
def play_video(num):
    videoplayer.load(f"UpGrow/{num}.mp4")
    videoplayer.pack(expand=True, fill="both")
    videoplayer.play()
home.bind("<Key>", print_key)
play_video(1)
home.mainloop()

Как сделать чтобы этого мигания не было?

Python для новичков » Как сделать чтобы бот ждал сообщения от пользователя, а не выполнял команду сразу? » Март 13, 2023 11:29:05

Не даёт ввести пользователю значение, а сразу обновляет и заносит команду, которую юзер использует для активации функции в качестве введенного значение.

import json
import requests

TOKEN = “” # Replace with your bot token

points = 0
task_list =

def add_task(chat_id):
message = “Type the task you want to add to your list:”
send_message(chat_id, message)
# Wait for response
while True:
updates = get_updates()
if len(updates) > 0:
task = updates
task_list.append({“task”: task, “completed”: False})
message = “Task added: {}”.format(task)
send_message(chat_id, message)
break

def print_tasks(chat_id):
if len(task_list) == 0:
message = “No tasks added yet!”
send_message(chat_id, message)
else:
for i, task in enumerate(task_list):
status = “Incomplete”
if task:
status = “Complete (+1 point)”
message = “{}) {} - {}”.format(i+1, task, status)
send_message(chat_id, message)

def mark_complete(chat_id):
message = “Enter task number to mark as complete:”
send_message(chat_id, message)
# Wait for response
while True:
updates = get_updates()
if len(updates) > 0:
task_num = int(updates)
task_list = True
global points
points += 1
message = “Task marked as complete, you now have {} points!”.format(points)
send_message(chat_id, message)
break

def view_outstanding(chat_id):
incomplete_tasks = [task for task in task_list if not task]
if len(incomplete_tasks) == 0:
message = “All tasks completed!”
else:
message = “Outstanding tasks:\n”
for i, task in enumerate(incomplete_tasks):
message += “{}) {}\n”.format(i+1, task)
send_message(chat_id, message)

def view_points(chat_id):
message = “You have earned {} points!”.format(points)
send_message(chat_id, message)

def save_data():
with open(“task_list.json”, “w”) as f:
data = {“points”: points, “tasks”: task_list}
json.dump(data, f)
print(“Data saved successfully!”)

def get_updates():
url = "https://api.telegram.org/bot{}/getUpdates".format(TOKEN)
response = requests.get(url)
data = response.json()
updates = data
return updates

def send_message(chat_id, message):
url = "https://api.telegram.org/bot{}/sendMessage“.format(TOKEN)
params = {”chat_id“: chat_id, ”text“: message}
response = requests.post(url, data=params)
print(response.status_code, response.content)

# Try to load saved data, if it exists
try:
with open(”task_list.json“, ”r") as f:
data = json.load(f
)
points = data
task_list = data
print(“Data loaded successfully!”)
except:
print(“No saved data found.”)

# Main loop
while True:
updates = get_updates()
if len(updates) > 0:
last_update_id = updates
# Process each message since last update
for update in updates:
message = update
chat_id = update

if message == “/start”:
send_message(chat_id, “Welcome to the Task Manager bot!”)
elif message == “/add”:
add_task(chat_id)
elif message == “/view”:
print_tasks(chat_id)
elif message == “/complete”:
mark_complete(chat_id)
elif message == “/points”:
view_points(chat_id)
elif message == “/outstanding”:
view_outstanding(chat_id)

# Mark last update as read
url = "https://api.telegram.org/bot{}/getUpdates?offset={}".format(TOKEN, last_update_id+1)
requests.get(url)

Python для новичков » как максимально укорить модель детектирования лиц retinaface или аналог?  » Март 10, 2023 08:16:05

как максимально укорить модель детектирования лиц retinaface или аналог?

Python для новичков » Какой самый быстрый способ разобрать видеофайл на фреймы? Быстрее чем реальное время. cv2 работает слишком медленно » Март 10, 2023 08:11:33

Вот этот пример работает слишком медленно
 cap = cv2.VideoCapture('video.mp4')
while(cap.isOpened()):
 ret, frame = cap.read()
  if ret == True:

Python для новичков » Python and Excel » Март 5, 2023 11:36:20

Всем доброго дня!!!
В столбце “С” содержится информация из 10 и более символов, необходимо получить первые 10 символов из этого столбца всех строк и перенести, скопировать (записать) их в новый документ эксель.

import openpyxl

wb = openpyxl.load_workbook(“sample — копия.xlsx”)
type(wb)

sheet = wb.active

rows = sheet.max_row
cols = sheet.max_column

for row in sheet:
string = ‘'
for cell in row:
string = string + str(cell.value) + ’ '
print(string)

Python для новичков » Разделние сплошного текста на слова » Март 5, 2023 09:06:25

Прошу подсказать библиотеку или примерный алгоритм(не обязательно с кодом, просто ход мыслей) для решения задачи из темы.
Есть сплошной текст без пробелов на русском языке. Даже если будут иногда ошибки - не страшно.
На входе строка, на выходе тоже строка.

IN: Довстречистобой
OUT: До встречи с тобой
IN: Разбежавшисьпрыгнусоскалы
OUT: Разбежавшись прыгну со скалы


Центр помощи » Даны два списка чисел, введенных с клавиатуры. Определить, сколько и каких чисел одновременно встречается в двух списках. » Март 4, 2023 14:21:45

Помогите, пожалуйста, разобраться в коде.
Даны два списка чисел, введенных с клавиатуры. Определить, сколько и каких чисел одновременно встречается в двух списках.
У меня получилось так, но выводятся не числа, а именно цифры:

list1 =
list2 =
def foo(list1,list2):
d = { }
for a in list1:
if a in list2:
d = foo(a, d)
print('\n'.join(f'{k} - {v} раз' for k, v in sorted(d.items())))

Выход:
0 - 1 раз
1 - 2 раз
2 - 2 раз
4 - 1 раз
5 - 2 раз
6 - 1 раз
7 - 2 раз
8 - 1 раз
9 - 1 раз

Python для новичков » Скрипт telegram для быстрого комментария » Март 2, 2023 19:11:47

Подскажите, как правильно реализовать скрипт на питоне для того, чтобы быстро при появления нового поста в канале написать определенный текстовый комментарий

Python для новичков » Ошибка в коде парсинга курсов валют с сайта банка » Фев. 27, 2023 04:41:08


Прошу помочь с написанием кода для бота в Телеграм, чтобы при команде /currency он писал текущие курсы покупка/продажа валют из сайта
https://www.primbank.ru/local/cron/infoVl.php?idType=4&idCity=1
текущий код выдает ошибку с сертификатом…. никак не могу понять как с ней справиться. Может быть есть другие варианты для парсинга курсов с данного сайта?
по аналогии пытался подтянуть курсы по ссылке https://www.primbank.ru/currency/ , но ошибка идентичная

requests.exceptions.SSLError: HTTPSConnectionPool(host='www.primbank.ru', port=443): Max retries exceeded with url: /local/cron/infoVl.php?idType=4&idCity=1 (Caused by SSLError(SSLCertVerificationError(1, ' certificate verify failed: unable to get local issuer certificate (_ssl.c:992)')))

[code python]
import requests
import telebot

# Укажите токен вашего бота
TOKEN = 'your_bot_token_here'

# Создаем экземпляр бота
bot = telebot.TeleBot(TOKEN)

# Обработчик команды /start
@bot.message_handler(commands=['start'])
def send_welcome(message):
bot.reply_to(message, "Привет! Введите команду /exchange, чтобы получить актуальные курсы валют.")

# Обработчик команды /exchange
@bot.message_handler(commands=['exchange'])
def send_exchange(message):
url = 'https://www.primbank.ru/local/cron/infoVl.php?idType=4&idCity=1'
response = requests.get(url)
if response.status_code == 200:
data = response.json()
# Отправляем сообщение с актуальными курсами валют
bot.reply_to(message, f"Курс USD: {data['USD']['buy']} / {data['USD']['sell']}\nКурс EUR: {data['EUR']['buy']} / {data['EUR']['sell']}")
else:
bot.reply_to(message, "Произошла ошибка при получении курсов валют.")

# Запускаем бота
bot.polling()
[/code]
__________________

Python для новичков » непрерывные возрастающие последовательности чисел » Фев. 25, 2023 11:29:55

Реализуйте функцию, которая находит в списке непрерывные возрастающие последовательности чисел и возвращает список с их перечислением.

Python для новичков » Внести данные о цвете пикселя из QLable в QTableWidget  » Фев. 24, 2023 19:10:17

Привет всем. Имеется программный код в котором, когда вы нажимаете на пиксель изображения, загруженного через OpenFileDialog в Pixmap QGraphicsScene, выводит значения цвета x, y и HEX в QLable. Кто-нибудь может подсказать, как HEX также можно вывести в ячейку QTableWidget?

     def table(self):
        # создание таблицы
        self.table = QtWidgets.QTableWidget(self.centralwidget)
        self.table.setGeometry(QtCore.QRect(10, 50, 462, 950))
        self.table.setStyleSheet("background-color:rgb(209, 209, 209)")
        self.headerLabels = list('A')
        n = 3000
        self.table.setRowCount(n)
        self.table.setColumnCount(len(self.headerLabels))
        self.table.setHorizontalHeaderLabels(self.headerLabels)
        self.table.horizontalHeader().setDefaultSectionSize(100)
        self.table.horizontalHeader().setMinimumSectionSize(125)
        self.table.verticalHeader().setVisible(False)
        self.table.verticalHeader().setDefaultSectionSize(25)
        self.table.verticalHeader().setMinimumSectionSize(25)
        for row in range(n):
            for col in range(len(self.headerLabels)):
                item = QTableWidgetItem(''.format(self.headerLabels[col], row))
                self.table.setItem(row, col, item)
        self.table.resizeColumnsToContents()
        self.table.resizeRowsToContents()


 class GraphicsView(QGraphicsView):  # +++
    clicked = pyqtSignal(str, str)
    def mousePressEvent(self, event):
        super(GraphicsView, self).mousePressEvent(event)
        self.setCursor(Qt.DragMoveCursor)
        # Получить положение мыши на экране
        pos = event.globalPos()
        image = QApplication.primaryScreen().grabWindow(
            int(QApplication.desktop().winId()),
            pos.x() - 23, pos.y() - 23, 47, 47).toImage()
        color = image.pixelColor(23, 23)
        if color.isValid():
            self.clicked.emit('View', color.name())
    def mouseReleaseEvent(self, event):
        super(GraphicsView, self).mouseReleaseEvent(event)
        self.setCursor(Qt.ArrowCursor)

 class MainssWindow(QMainWindow, Ui_MainsWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.layout = QtWidgets.QHBoxLayout(self.wid)
        self.layout.addWidget(self.wid)
        self.scene = GraphicsScene()
        self.scene.setSceneRect(0, 0, 1400, 900)
        width = Settings.NUM_BLOCKS_X * Settings.WIDTH
        height = Settings.NUM_BLOCKS_Y * Settings.HEIGHT
        self.scene.setSceneRect(0, 0, width, height)
        self.scene.setItemIndexMethod(QtWidgets.QGraphicsScene.NoIndex)
        self.setMouseTracking(True)
        self.graphicsView.setScene(self.scene)
        self.scene.clicked.connect(self.point1)
        self.graphicsView.clicked.connect(self.point1) # +++
        self.table()

 class QS(QtWidgets.QGraphicsScene):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        width = Settings.NUM_BLOCKS_X * Settings.WIDTH
        height = Settings.NUM_BLOCKS_Y * Settings.HEIGHT
        self.setSceneRect(0, 0, width, height)
        self.setItemIndexMethod(QtWidgets.QGraphicsScene.NoIndex)
        for x in range(0,Settings.NUM_BLOCKS_X+1):
            xc = x * Settings.WIDTH
            self.addLine(xc,0,xc,height)
        for y in range(0,Settings.NUM_BLOCKS_Y+1):
            yc = y * Settings.HEIGHT
            self.addLine(0,yc,width,yc)

 class GraphicsScene(QGraphicsScene):
    clicked = pyqtSignal(str, QPointF)
    def mousePressEvent(self, event):
        super(GraphicsScene, self).mousePressEvent(event)
        sp = event.scenePos()
        self.clicked.emit('Scene', sp)

     def point1(self, text, value):
        if text == 'Scene':
            self.lab.setText(f'x1 = {value.x()}, y1 = {value.y()}. Интенсивность: ')
        if text == 'View':
            self.lab.setText(f'{self.lab.text()} {value}')

Python для новичков » Подскажите мои ошибки. » Фев. 19, 2023 08:25:03

(Python 3.10 64-bit)
Win 10
——————–
Такая задача:
Создать окно управления на Python и PyQt
(Все скрипты находятся в каталоге: E:\__Moi_scripti)
Рамер главного окна: win.setGeometry(1400,1400,1400,1300)
Разместить равномерно - 5 столбцов 5 рядов
В этом окне 25 одинаковых зон управления и запуска моих скриптов.
В каждой зоне управления должно быть:
Название скрипта
Открыть (Путь к каталогу скрипта)
Кнопка запуска скрипта
———————-
В пояснении указать:
В каких строках я вставлю:
Название скрипта
Открыть (Путь к каталогу скрипта)
Кнопка запуска скрипта
Вот сам скрипт:
 import sys
from pathlib import Path
from PyQt5.QtWidgets import *
 
app = QApplication(sys.argv)
win = QWidget()
win.setGeometry(1400, 1400, 1400, 1300)
 
layout = QGridLayout()
 
for i in range(5):
    for j in range(5):
        label = QLabel('plist_down.py')
        button1 = QPushButton('Open (E:\__Moi_scripti\03_yotube_plist_downloader)')
        button2 = QPushButton('Run Script')
        layout.addWidget(label, i, j)
        layout.addWidget(button1, i, j+1)
        layout.addWidget(button2, i, j+2)
 
win.setLayout(layout)
win.show()
 
sys.exit(app.exec_())
Окно не появляется ?

Python для новичков » Помогите озвучить переведённый текст. » Фев. 15, 2023 08:32:11

Приветствую всех! Прошу сильно не пинать, поскольку я занимаюсь этим всего 2 дня и в тонкостях не смыслю. Суть в следующем: я набросал простейшее приложение для перевода En-Ru, там всё криво и безобразно, но почти работает. На данном этапе главный затык – не могу добиться озвучки перевода на русский, т.е. в верхнем поле я ввожу английское слово (вводимые символы озвучиваются NVDA), а в нижнем возникает перевод, но не проговаривается. Буду очень признателен всем, кто откликнется.

import pyttsx3
from tkinter import*
from googletrans import Translator
from gtts import gTTS
from playsound import playsound

te = pyttsx3.init()
language = ‘ru’
obj1 = gTTS('Пишите слово', lang=language, slow=False)
te.say('obj1')
obj1.save(“fict.mp3”)
playsound(“fict.mp3”)

def tran():
text = t.get('1.0', END)
a = translator.translate(text, dest='ru')
t1.delete('1.0', END)
t1.insert('1.0', a.text)

root = Tk()
root.geometry('500x350')
root.title('Переводчик')
root.resizable(width=False, height=False)
root = ‘yellow’
translator = Translator()

label = Label(root, fg='black', bg='yellow', font='Arial 14 bold', text='Введите текст для перевода')
label.place(relx=0.5, y=30, anchor=CENTER)
t = Text(root, width=35, height=5, font='Arial 12 bold')
t.place(relx=0.5, y=100, anchor=CENTER)

btn = Button(root, width=45, text='Перевести', command=tran)
btn.place(relx=0.5, y=180, anchor=CENTER)

t1 = Text(root, width=35, height=5, font='Arial 12 bold')
t1.place(relx=0.5, y=260, anchor=CENTER)

root.mainloop()

Python для новичков » import whisper error » Фев. 12, 2023 22:33:54

 import discord
import os
from discord.ext import commands
from dotenv import load_dotenv
import whisper
from tts import tts
from parse_statement import parse
load_dotenv()
intents = discord.Intents.all()
client = commands.Bot(command_prefix="&", intents=intents)
# model = whisper.load_model("base")
model = whisper.load_model("small")
# join vc
@client.command()
async def join(ctx):
    if ctx.author.voice:
        channel = ctx.message.author.voice.channel
        await channel.connect()
    else:
        await ctx.send("not in a voice channel!")
# leave vc
@client.command()
async def leave(ctx):
    if ctx.voice_client:
        await ctx.voice_client.disconnect()
    else:
        await ctx.send("not in a voice channel!")
# play tts audio from command
@client.command()
async def play(ctx, *, arg):
    tts(ctx, arg)
@client.command()
async def listen(ctx):
    if ctx.voice_client:
        ctx.voice_client.start_recording(discord.sinks.WaveSink(), callback, ctx)
        await ctx.send("listening...")
    else:
        await ctx.send("not in a voice channel!")
async def callback(sink: discord.sinks, ctx):
    for user_id, audio in sink.audio_data.items():
        if user_id == ctx.author.id:
            audio: discord.sinks.core.AudioData = audio
            print(user_id)
            filename = "audio.wav"
            with open(filename, "wb") as f:
                f.write(audio.file.getvalue())
            text = model.transcribe(filename)["text"]
            os.remove(filename)
            print(f"Received from {ctx.author.name}: {text}")
            reply = parse(text)
            print(f"Reply: {reply}")
            tts(ctx, reply)
# stops recording
@client.command()
async def stop(ctx):
    ctx.voice_client.stop_recording()
@client.event
async def on_ready():
    print(f"We have logged in as {client.user}")
@client.event
async def on_message(message):
    await client.process_commands(message)
    if message.author == client.user:
        return
    # ping
    if message.content.startswith("ping"):
        await message.channel.send("pong")
client.run(os.environ.get("DISCORD"))


(discord) PS D:\discord> & CUsers/Gena/.virtualenvs/discord-q4ERoUCO/Scripts/python.exe ddiscord/package/test/bot.py
Traceback (most recent call last):
File “d:\discord\package\test\bot.py”, line 7, in <module>
import whisper
File “C:\Users\Gena\.virtualenvs\discord-q4ERoUCO\lib\site-packages\whisper.py”, line 69, in <module>
libc = ctypes.CDLL(libc_name)
File “C:\Users\Gena\AppData\Local\Programs\Python\Python310\lib\ctypes\__init__.py”, line 364, in __init__
if ‘/’ in name or ‘\\’ in name:
TypeError: argument of type ‘NoneType’ is not iterable
(discord) PS D:\discord>

подскажите что с этим делать
полный исходник
https://github.com/sergmister/Discord-VC-Bot