async def _send_album(self: 'TelegramClient', entity, files, caption='',
formatting_entities=None,
progress_callback=None, reply_to=None,
parse_mode=(), silent=None, schedule=None,
supports_streaming=None, clear_draft=None,
force_document=False, background=None, ttl=None):
formatted_entities
result = []
while file:
result += await self._send_album(
entity, file[:10], caption=captions[:10], formatting_entities=formatting_entities,
progress_callback=used_callback, reply_to=reply_to,
parse_mode=parse_mode, silent=silent, schedule=schedule,
supports_streaming=supports_streaming, clear_draft=clear_draft,
force_document=force_document, background=background,
)
file = file[10:]
captions = captions[10:]
sent_count += 10
return result
formatted_entities
к первому сообщению, если оно содержит текст:if captions and captions[0]:
captions[0] = (captions[0][0], formatting_entities)
getpass.getpass()
не работает в консоли PyCharm в которой запускается бот, на этом месте программа и зависает.password: typing.Union[typing.Callable[[], str], str] = lambda: getpass.getpass('Please enter your password: '),
наpassword: typing.Union[typing.Callable[[], str], str] = lambda: input('Please enter your password: '),
start()
, то он должен работать, НО при проверке кода, внутри того же файла, атрибут password
почему-то всеравно остаётся lambda-функцией. Позже попробую найти почему так и как это исправить. hours = n % (60 * 24) // 60
minutes = n % 60
from aiogram import Router, types, F
from aiogram.utils import formatting as fmt
# Редактор постов канала в отдельном роутере
router = Router()
# Это понадобится, чтобы в медиагруппе редактировалось только описание первого медиа
check_mg = set()
#Фильтры: проверим что пост не переслан и что это медиа имеющие caption
@router.channel_post(~F.forward_from_chat, ~F.forward_from, (F.text | F.photo | F.video | F.animation | F.document))
async def redactor(message: types.Message):
# Собираем текстовые данные из поста
text = message.text or message.caption or ''
# Собираем те entities которые уже есть в посте
ent = message.entities or message.caption_entities or []
# Удаляем встроенные ссылки если они есть
ent = [e for e in ent if e.type != 'text_link']
# Через инструмент formatting создаём внешний вид будущего поста
content = fmt.Text(
# Старый текст
text,
'\n\n',
# В моём случае я добавляю три ссылки на канал, чат и админа с эмодзи-разделителем
fmt.as_line(
fmt.Bold(fmt.TextLink("Канал", url='https://t.me/1')),
fmt.Bold(fmt.TextLink("Чат", url='https://t.me/2')),
fmt.Bold(fmt.TextLink("Админ", url='https://t.me/3')),
# Тут эмодзи который будет между ссылками
sep=' '
)
)
# Собираем новый текст и новые entities в кучу
text, new_ent = content.render()
# Тут расписывать не буду, разные проверки и разные варианты отправки отредактированного сообщения
if message.text is not None:
if len(text) <= 4096:
await message.edit_text(text, entities=ent + new_ent, disable_web_page_preview=True)
else:
print("Can't edit Text, length exceeded.")
elif message.media_group_id is None:
if len(text) <= 1024:
await message.edit_caption(caption=text, caption_entities=ent + new_ent, disable_web_page_preview=True)
else:
print("Can't edit Caption, length exceeded.")
elif message.media_group_id not in check_mg:
check_mg.add(message.media_group_id)
if len(text) <= 1024:
await message.edit_caption(caption=text, caption_entities=ent + new_ent, disable_web_page_preview=True)
await asyncio.sleep(1)
check_mg.remove(message.media_group_id)
else:
print("Can't edit Caption, length exceeded.")
@router.message(Reg.number)
async def two_three(message: Message, bot: Bot, state: FSMContext):
await state.update_data(number=message.text)
data=await state.get_data()
await bot.send_message(chat_id='нужный айди', text=f'Спасибо, регистрация завершена. \n Имя: {data["name"]} \n Номер: {data ["number"]}')
await state.clear()
from run import bot
For this to work, your audio must be in an .OGG file encoded with OPUS
import subprocess
import io
def mp3_to_ogg(filename, path=''):
with open(f'{path}{filename}.mp3', 'rb') as input_file, open(f'{path}{filename}.ogg', 'wb') as output_file:
mp3_io = io.BytesIO(input_file.read())
ffmpeg_command = ['ffmpeg', '-i', 'pipe:0', '-c:a', 'libopus', '-f', 'ogg', 'pipe:1']
result = subprocess.run(ffmpeg_command, input=mp3_io.read(), capture_output=True)
ogg_bytes = result.stdout
output_file.write(ogg_bytes)
#pip install pyproj
from pyproj import CRS, Transformer
def sk_to_wgs84(lat: str, lon: str) -> tuple:
sk = CRS('epsg:7827')
wgs84 = CRS('epsg:4326')
transformer = Transformer.from_crs(sk, wgs84)
x_wgs84, y_wgs84 = transformer.transform(lat, lon)
return x_wgs84, y_wgs84
from pyrogram import Client, filters
from pyrogram.raw.functions.messages import GetMessageReactionsList
@app.on_message(filters.command("get_react"))
async def get_mess_reactions(client, message):
mess_id, mess_chat = 12345678, "some_chat" #тут id нужного сообщения и чат (id / username)
r_peer = await app.resolve_peer(mess_chat) #обязательно использовать этот метод для получения правильного пира
print(await app.invoke(GetMessageReactionsList(peer=r_peer, id=mess_id, limit=-1))) #обязательно используем именованные параметры
await bot.answer_callback_query(callback_query_id=cmd.id, text="Уведомление", show_alert=True)
await callback_query.answer("Уведомление", show_alert=True)
import string
def is_russian(text):
alpha = "абвгдеёжзиклмнопрстуфхцчшщъыьэюя"
new_text = text.translate(str.maketrans('', '', string.punctuation)).lower().replace(' ', '')
rulet = 0
for letter in new_text:
if letter in alpha:
rulet += 1
# Если больше или равно 70%
if rulet/len(new_text) >= 0.7:
return(True)
else:
return(False)
good_text = "Какой-то текст, со знаками препинания, конечно же, sorry!"
bad_text = "Some english text, isn't russian."
secret = "Люблю Gucci"
print(is_russian(good_text)) #вернёт True
print(is_russian(bad_text)) #вернёт False
print(is_russian(secret)) #вернёт False
s = r"С:\User\Users\Programs\program.py"
print(s[:s.rindex("\\")+1])
description
в твоём случае это всё ещё список объектов супа. К ним можно/нужно применить метод text
, чтобы получить именно текстовую составляющую.import requests
from bs4 import BeautifulSoup
url = "http://www.swhl.ru/page/1018390"
r = requests.get(url)
soup = BeautifulSoup(r.content, "lxml")
description = soup.find_all("div", class_="page-text")
for element in description:
print(element.text)
orders = [[1, "first", "order"], [2, "second", "order"], [3, "third", "order"], [4, "fourth", "order"]]
order = int(input("Введите номер заказа: "))
for line in orders:
if line[0] == order:
print(*line[1:])
orders = [["1", "first", "order"], ["2", "second", "order"], ["3", "third", "order"], ["4", "fourth", "order"]] #первый элемент - строка
order = input("Введите номер заказа: ") #не int
for line in orders:
if str(line[0]) == order: #если не преобразовывать список, можно здесь
print(*line[1:])