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)
ForeignKey
from django.contrib.auth.models import User
class Comments(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name='Пользователь')
text_comments = models.TextField('Текст комментария', max_length=200)
post = models.ForeignKey(Post, verbose_name='Публикация', on_delete=models.CASCADE)
def __str__(self):
return f'{self.user.username} / {self.post}'
class CommentsForm(forms.ModelForm):
class Meta:
model = Comments
fields = ('text_comments',)
class AddComments(View):
def post(self, request, post_id):
form = CommentsForm(request.POST)
if form.is_valid():
comment = form.save(commit=False)
comment.post_id = post_id
comment.user = request.user
comment.save()
return redirect('post_detail', post_id=post_id)
<div>
<h3>Комментарии:</h3>
<form action="{% url 'add_comments' post.id %}" method="post">
<h3></h3>
{% csrf_token %}
<div>
<textarea name="text_comments" placeholder="Ваш комментарий..."></textarea>
</div>
<div><input type="submit"></div>
</form>
</div>
<div>
{% for comment in post.comments_set.all reversed %}
<div class="view-comment">
<h4>{{ comment.user.username }}</h4>
<p><i>{{ comment.text_comments }}</i></p>
</div>
{% endfor %}
</div>
from vk_api import VkApi
from vk_api.exceptions import ApiError
import re
token = '1111'
vk_session = VkApi(token=token)
vk = vk_session.get_api()
# Функция для извлечения идентификатора поста из ссылки
def extract_post_id(url):
match = re.search(r'wall(-?\d+_\d+)', url)
if match:
return match.group(1)
return None
# Список ссылок на посты
post_urls = [
'https://vk.com/wall-22522055_2191390',
]
# Извлекаем идентификаторы постов
post_ids = [extract_post_id(url) for url in post_urls if extract_post_id(url)]
# Получаем текст постов
try:
posts = vk.wall.getById(posts=','.join(post_ids))
for post in posts:
print(f"ID: {post['id']}, Текст: {post['text']}")
except ApiError as e:
print(f"Ошибка: {e}")
cur.execute('''DELETE FROM parsing
WHERE parsing_user_id IN (SELECT user_full_data_user_id FROM user_full_data)''')
Ну и, конечно, sqlite - это не для таких БДCREATE INDEX idx_user_full_data_user_id ON user_full_data(user_full_data_user_id);
CREATE INDEX idx_parsing_user_id ON parsing(parsing_user_id);
bot.answer_callback_query(call.id, text="Ваше сообщение")
DateTime localTime = DateTime.Now;
DateTime Values = dateTimePicker2.Value;
TimeSpan difference = localTime.Subtract(Values);
// Форматируем разницу во времени
textBox7.Text = string.Format("{0:hh\\:mm\\:ss}", difference);
// Проверяем, превышает ли разница 1 час
if (difference > TimeSpan.FromHours(1))
{
}
$('#display').html('<a href="#" onclick="$.ajaxCall(\'app.screenChange\', \'appID={app:id}&page=1\', \'GET\'); return false;">Go</a>');
$('#display').html("<a href='#' onclick=\"$.ajaxCall('app.screenChange', 'appID={app:id}&page=1', 'GET'); return false;\">Go</a>");