@dp.message_handler(state=Form.name)
async def add_name(message: types.Message):
user_name = message.text.strip()
try:
async with aiosqlite.connect('base.db') as db:
await db.execute('INSERT OR IGNORE INTO user (name) VALUES (?)', (user_name,))
await db.commit()
await message.answer("Готово")
except Exception as e:
await message.answer(f"Произошла ошибка {e}")
os.rename(file, f"{path}/{file_name}.mp3")
video.download(f'{path}')
очищает имя скачиваемого файла от недопустимых символов, но в file_name
они остаются, поэтому он и не находит f"{path}/{file_name}.mp3
# Функция для очистки имени файла от недопустимых символов
def clean_filename(filename):
# Заменяем все недопустимые символы на подчеркивания
return re.sub(r'[\\/*?:"<>|]', '_', filename)
async def install_data(link: str, file_name: str, _type: str, path: str, _lang: str):
language = lang[_lang]
try:
video = YouTube(link)
if _type == 'audio':
video = video.streams.get_audio_only()
if _type == 'video':
video = video.streams.get_highest_resolution()
# Очищаем имя файла от недопустимых символов
clean_file_name = clean_filename(file_name)
file = video.download(path)
extension = 'mp3' if _type == 'audio' else 'mp4'
os.rename(file, f"{path}/{clean_file_name}.{extension}")
return language['success']
except Exception as e:
print(e)
return f"{language['err']} + \n {e}"
if not await client.is_user_authorized():
with open('valet.txt', 'r') as file:
lines = file.readlines()
if lines:
last_phone_number = lines[-1].strip()
print(f"Используем номер телефона из файла: {last_phone_number}")
else:
last_phone_number = input("Введите ваш номер телефона (в формате +1234567890): ")
await client.send_code_request(last_phone_number)
code = input("Введите код из SMS: ")
await client.sign_in(last_phone_number, code)
def plugin_page(name, **kwargs):
def decorator(f):
@wraps(f)
def wrapper(*args, **kwargs):
# Вызов оригинальной функции и получение её результата
result = f(*args, **kwargs)
# Объединение результата функции с дополнительными аргументами
context = {**result, **kwargs}
return render_template('plugin-' + name.lower() + '.html', **context)
return wrapper
return decorator
С олимпиадными задачами это всё быстро надоест и начнёшь подумывать, насчёт состояния своего серого вещества и полезности этого занятия.
Надо придумать для себя какой-то проект - в меру сложный и в меру простой, чтобы охватывал область, в которой планируешь развиваться, интересный для самого себя. Желательно что-нибудь "без конца". Т. е. тот же блог ты напишешь, но до идеала всегда будет далеко и какое-то время это будет для тебя мотивацией двигаться вперёд.
from pynput.mouse import Listener as MouseListener
from pynput import keyboard
import logging
import time
import pydirectinput
mode = input("1 - Record TAS\n2 - Replay TAS\nChoice: ")
if mode == "1":
filename = f"{input('Name for record: ')}.tas"
file = open(filename, 'w')
file.close()
file = open(filename, 'r+')
print("Record will start in 3 seconds...")
time.sleep(3)
presstime = 0
releasetime = 0
movetime = time.time()
keytime = {}
pressed_keys = set()
def on_move(x, y):
global movetime
file.write(f"sleep {time.time() - movetime}\n")
file.write(f"move {x} {y}\n")
movetime = time.time()
file.flush()
def on_click(x, y, button, pressed):
global presstime
global releasetime
if pressed:
file.write(f'press {x} {y} {button}\n')
presstime = time.time()
file.flush()
else:
releasetime = time.time()
file.write(f"sleep {releasetime - presstime}\n")
file.write("release\n")
file.flush()
def on_scroll(x, y, dx, dy):
file.write(f'scroll ({x}, {y})({dx}, {dy})\n')
file.flush()
def on_press(key):
global pressed_keys
pressed_keys.add(key)
file.write(f"pkey {key}\n")
file.flush()
def on_release(key):
global pressed_keys
pressed_keys.remove(key)
file.write(f"prelease {key}\n")
file.flush()
with keyboard.Listener(on_press=on_press, on_release=on_release) as klistener:
with MouseListener(on_move=on_move, on_click=on_click, on_scroll=on_scroll) as listener:
klistener.join()
listener.join()
elif mode == "2":
filename = input("Enter TAS name: ")+".tas"
file = open(filename, 'r')
script = file.readlines()
print("Replay will start in 3 seconds...")
time.sleep(3)
for task in script:
if "sleep" in task:
task = task.replace("sleep ", "").replace("\n", "")
time.sleep(float(task))
elif "move" in task:
task = task.replace("move ", "").replace("\n", "")
task = task.split(" ")
x = int(task[0])
y = int(task[1])
pydirectinput.moveTo(x, y, duration=0.0, _pause=False)
elif "press" in task and "left" in task:
task = task.replace("press ", "").replace("\n", "")
task = task.split(" ")
x = int(task[0])
y = int(task[1])
pydirectinput.moveTo(x, y, duration=0.0, _pause=False)
pydirectinput.mouseDown(_pause=False)
elif "press" in task and "right" in task:
task = task.replace("press ", "").replace("\n", "")
task = task.split(" ")
x = int(task[0])
y = int(task[1])
pydirectinput.moveTo(x, y, duration=0.0, _pause=False)
pydirectinput.mouseDown(button='right', _pause=False)
elif "release" in task and "prelease" not in task:
pydirectinput.mouseUp(_pause=False)
pydirectinput.mouseUp(button='right', _pause=False)
elif "pkey" in task:
task = task.replace("pkey ", "").replace("\n", "").replace("Key.", "").replace("_l", "").replace("_r", "").replace("'", "")
pydirectinput.keyDown(task, _pause=False)
elif "prelease" in task:
task = task.replace("prelease ", "").replace("\n", "").replace("Key.", "").replace("_l", "").replace("_r", "").replace("'", "")
pydirectinput.keyUp(task, _pause=False)
print("Replay ended...")
Нужно делать авторизацию с правами offline, тогда access_token не будет привязан к ip и будет бессрочным.
Разумеется такой access_token не вечный. Он перестанет работать, если пользователь сменит пароль или же запретит приложению доступ в настройках.
from vk_api import VkApi
from vk_api.exceptions import ApiError
import re
import pandas as pd
token = 1111
vk_session = VkApi(token=token)
vk = vk_session.get_api()
df1 = pd.read_excel(r'C:\Users\Bot\Downloads\1.xlsx')
def extract_post_id(url):
match = re.search(r'wall(-?\d+_\d+)', url)
if match:
return match.group(1)
return None
post_urls = df1['Ссылка на пост']
post_ids = [extract_post_id(url) for url in post_urls if extract_post_id(url)]
# Разбиваем список идентификаторов на части по 100 элементов
chunks = [post_ids[i:i + 100] for i in range(0, len(post_ids), 100)]
all_posts = []
# Получаем текст постов по частям
for chunk in chunks:
try:
posts = vk.wall.getById(posts=','.join(chunk))
all_posts.extend(posts)
except ApiError as e:
print(f"Ошибка: {e}")
df = pd.DataFrame(all_posts)
df.to_excel(r'C:\Users\Bot\Desktop\БД\данные.xlsx', index=False)