import logging # стандартная библиотека для логирования
import parser_functions # библиотека этого парсера
from telethon import TelegramClient, events, sync, connection # pip3 install telethon
from telethon.tl.functions.channels import JoinChannelRequest
from config import api_id, api_hash # получение айди и хэша нашего приложения из файла config.py
from loguru import logger
import asyncio
from telethon.errors.rpcerrorlist import FloodWaitError
# настройка логгера
logging.basicConfig(
level=logging.INFO,
filename='parser_log.log',
filemode='w',
format="%(asctime)s %(levelname)s %(message)s"
)
url = ["XXXX"]
flag = True
async def main():
async with TelegramClient('new', api_id, api_hash) as client:
for channel in url:
try:
logger.info(f"Аккаунт был подключен!")
await client(JoinChannelRequest(channel))
client.on_message(parser_functions.on_message) # регистрация обработчика сообщений
await client.run_until_disconnected()
except FloodWaitError as fwe:
print(f'Waiting for {fwe}')
await asyncio.sleep(delay=fwe.seconds)
if __name__ == "__main__":
asyncio.run(main())
def on_message(event):
try:
channel_id = event.message.chat.id
directory_name = str(event.message.id)
os.makedirs(f"{channel_id}/{directory_name}", exist_ok=True)
await parser_functions.get_message_content(client, event.message, url, channel_id, directory_name)
except Exception as passing:
logger.error(passing)
output = subprocess.check_output(["ping", "www.youtube.com"])
print(output.decode())
output = subprocess.run(["ping", "www.youtube.com"], capture_output=True, text=True)
print(output.stdout)
var swiper = new Swiper('.swiper-container', {
direction: 'horizontal', // Измените на «вертикальный», если хотите вертикальную прокрутку
mousewheel: true, // Измените значение на false, если вы хотите отключить управление колесом мыши
});
// Вручную устанавливаем индекс слайда, когда пользователь прокручивает вверх
swiper.slideTo(index, speed, runCallbacks);
async function elUp(selector) {
try {
var html = await (await fetch(location.href)).text();
var newdoc = new DOMParser().parseFromString(html, 'text/html');
var chat = document.querySelector(selector);
chat.outerHTML = newdoc.querySelector(selector).outerHTML;
chat = document.querySelector(selector);
chat.scrollTop = chat.scrollHeight;
return true;
} catch(err) {return false;}
}
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:xct="http://xamarin.com/schemas/2020/toolkit"
x:Class="YourNamespace.YourPage">
<StackLayout>
<xct:Expander>
<xct:Expander.Header>
<Label Text="Информация"
FontSize="Large"
HorizontalOptions="Center" />
</xct:Expander.Header>
<xct:Expander.Content>
<Label Text="Здесь будет твой текст"
FontSize="Medium"
HorizontalOptions="Center"
VerticalOptions="Center" />
</xct:Expander.Content>
</xct:Expander>
</StackLayout>
</ContentPage>
<xct:Expander.Header>
<StackLayout Orientation="Horizontal">
<Image Source="your_icon.png"
WidthRequest="24"
HeightRequest="24" />
<Label Text="Информация"
FontSize="Large"
HorizontalOptions="Center" />
</StackLayout>
</xct:Expander.Header>
your_icon.png
на имя файла с твоей иконкой. Это добавит иконку слева от текста заголовка.http://xamarin.com/schemas/2020/toolkit
в своем XAML-файле. void Update()
{
if (canExecute && (Input.GetMouseButtonDown(0) || Input.GetKeyDown(KeyCode.Space)) && !EventSystem.current.IsPointerOverGameObject(null, null) && !EventSystem.current.IsPointerOverGameObject(null, EventSystem.current.currentTouchEvent)) && !endGame)
{
canExecute = false;
cooldownTimer = cooldownDuration;
Vector3 mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
directionKnife = mousePosition;
mousePosition.z = 0f;
GameObject knife = Instantiate(knifePrefab, mousePosition, Quaternion.identity);
StartCoroutine(RotateKnife(knife));
}
}
public class CreateModel : PageModel
{
// Добавьте ваш контекст базы данных здесь
// Например: private readonly AppDbContext _context;
public CreateModel(/*AppDbContext context*/)
{
// _context = context;
}
public async Task<IActionResult> OnPostAsync(string name, string comment)
{
// Сохраните данные в базе данных здесь
// Например: _context.Comments.Add(new Comment { Name = name, CommentText = comment });
// await _context.SaveChangesAsync();
return RedirectToPage();
}
}
@page
@model WebApplication1.Pages.CreateModel
@{
ViewData["Title"] = "Create";
}
<h2>Create</h2>
<form method="post">
<label for="name">Name:</label>
<input id="name" name="name" type="text" required />
<br />
<label for="comment">Comment:</label>
<input id="comment" name="comment" type="text" required />
<br />
<input type="submit" value="Submit" />
</form>
using System;
using System.Data;
using MySql.Data.MySqlClient;
class Program
{
static void Main()
{
string connectionString = "Server=localhost;Database=myDatabase;Uid=myUsername;Pwd=myPassword;";
using (MySqlConnection connection = new MySqlConnection(connectionString))
{
connection.Open();
MySqlCommand cmd = new MySqlCommand("SELECT * FROM myTable", connection);
MySqlDataAdapter adapter = new MySqlDataAdapter(cmd);
DataTable table = new DataTable();
adapter.Fill(table);
connection.Close();
foreach (DataRow row in table.Rows)
{
Console.WriteLine($"{row["Column1"]}, {row["Column2"]}, {row["Column3"]}");
}
}
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Mouse : MonoBehaviour
{
public float speed;
public float sensitive;
float horizontal;
float vertical;
float x;
float z;
public GameObject player;
private Animator playerAnimator;
private Rigidbody playerRigidbody;
void Start()
{
Cursor.lockState = CursorLockMode.Locked;
playerAnimator = player.GetComponent<Animator>();
playerRigidbody = player.GetComponent<Rigidbody>();
}
void Update()
{
x = Input.GetAxis("Horizontal") * speed * Time.deltaTime;
z = Input.GetAxis("Vertical") * speed * Time.deltaTime;
horizontal += Input.GetAxis("Mouse X") * sensitive;
vertical += Input.GetAxis("Mouse Y") * sensitive;
vertical = Mathf.Clamp(vertical, -20, 20);
Vector3 newPosition = playerRigidbody.position + player.transform.right * x + player.transform.forward * z;
playerRigidbody.MovePosition(newPosition);
transform.localRotation = Quaternion.Euler(-vertical, 0, 0);
player.transform.localRotation = Quaternion.Euler(0, horizontal, 0);
PlayerController();
}
void PlayerController()
{
if (z > 0)
{
if (Input.GetKey(KeyCode.LeftShift))
{
playerAnimator.SetInteger("Move", 2);
speed = 4;
}
else
{
playerAnimator.SetInteger("Move", 1);
speed = 2;
}
}
else if (z < 0)
{
playerAnimator.SetInteger("Move", -1);
speed = 2;
}
else
{
playerAnimator.SetInteger("Move", 0);
speed = 0;
}
}
}
const targetNavbarDesktop = document.querySelector('.targetNavbarDesktop');
const fixedNavbarDesktop = document.querySelector('.fixedNavbarDesktop');
const obFixedNavbarDesktop = new IntersectionObserver(obCallbackDesktop);
function obCallbackDesktop(payload) {
if (document.documentElement.clientWidth > 992) {
if (payload[0].boundingClientRect.y < 0) {
document.querySelector('.class1').style.marginBottom = fixedNavbarDesktop.offsetHeight + 'px';
fixedNavbarDesktop.classList.add('class2');
} else {
fixedNavbarDesktop.classList.remove('class2');
document.querySelector('.class1').style.marginBottom = '0';
}
}
}
obFixedNavbarDesktop.observe(targetNavbarDesktop);
const targetNavbarMobile = document.querySelector('.targetNavbarMobile');
const fixedNavbarMobile = document.querySelector('.fixedNavbarMobile');
const obFixedNavbarMobile = new IntersectionObserver(obCallbackMobile);
function obCallbackMobile(payload) {
if (document.documentElement.clientWidth < 992) {
if (payload[0].boundingClientRect.y < 0) {
document.querySelector('.class1').style.marginBottom = fixedNavbarMobile.offsetHeight + 'px';
fixedNavbarMobile.classList.add('class3');
} else {
document.querySelector('.class1').style.marginBottom = '0';
fixedNavbarMobile.classList.remove('class3');
}
}
}
obFixedNavbarMobile.observe(targetNavbarMobile);
INSERT INTO stats
Вместо запятой между VALUES($1) и [response.rows[0].id]
должен быть знак скобки.await pool.query('INSERT INTO stats (id_user) VALUES($1) RETURNING id', [response.rows[0].id]);
import io
from telethon.tl.custom import File
from typing import List, Tuple, Union
from mypy_extensions import TypedDict
from telethon import TelegramClient, events
from telethon.tl.types import InputMessagesFilterPhotos
# Создаем клиента Telegram
client = TelegramClient('session_name', api_id, api_hash)
# Создаем типизированный словарь для сообщений
class MessageDict(TypedDict):
id: int
message: str
media: Union[None, List[Tuple[str, bytes]]]
# Обработчик событий
@client.on(events.NewMessage(incoming=True, pattern='/start'))
async def handler(event):
# Получаем сообщение
message = event.message
# Получаем медиа-файлы
media = []
if message.media:
for file in message.media:
if isinstance(file, File):
# Конвертируем telethon.tl.custom.file в hints.FileLike
file_bytes = io.BytesIO(await file.download_media(bytes))
media.append((file.mime_type, file_bytes))
# Создаем типизированный словарь для сообщения
message_dict: MessageDict = {
'id': message.id,
'message': message.message,
'media': media if media else None
}
# Отправляем сообщение в другой канал
await client.send_message('other_channel', message_dict)
# Запускаем клиента Telegram
client.start()
client.run_until_disconnected()
css.rete-container {
display: flex;
flex-direction: column;
}
editor.on('connectioncreated', ({ connection }) => {
connection.setCurve('vertical');
});