open(random.choice(r'C:\путь к папке\images\*'), 'rb')
r'C:\путь к папке\images\*'
это строка. random.choice в лучшем случае выберет элемент строки (символ) и передаст его на вход open. Open не сможет открыть файл с именем, которое есть случайный символ из строки. import asyncio
from pyrogram import Client
import shelve
import random
from secret.config import Config
TEXTS = ['Круто!', 'Nice!!!!', 'Oh my god']
config = Config()
api_id = config.api_id
api_hash = config.api_hash
phone_number = config.phone
PUBLIC = config.title
chat_id = config.chat_id
name = config.name
processed_messages = shelve.open('processed_messages.db', writeback=True)
app = Client(name, api_id, api_hash, phone_number=phone_number)
async def main():
async with app:
public = await app.get_chat(PUBLIC)
async for msg in app.get_chat_history(chat_id, limit=100):
if msg.from_user: # если у нас есть параметр from_user
any_sender_id = msg.from_user.id # присваеваем ID юзера
else: # иначе
any_sender_id = msg.sender_chat.id # присваеваем ID канала или чата
if any_sender_id == public.id: # проверяем что это нужный паблик
if str(msg.id) in processed_messages:
print(f'Пропускаем уже обработанное message_id={msg.id}')
else:
processed_messages.update({str(msg.id): True})
print(f'Обработка message_id={msg.id}')
text = random.choice(TEXTS)
print(text)
result = await app.send_message(chat_id, text, reply_to_message_id=msg.id)
processed_messages.update({str(result.id): True})
await asyncio.sleep(1) # пауза, чтоб не банили за флуд
app.run(main())
big_file_id
можно использовать только для download.lake_number = 0
@dp.message_handler()
async def lake(message: types.Message):
global lake_number
if message.text == 'Бассейн №1':
await bot.send_message(message.from_user.id, 'Введи расстояние до воды №1.')
lake_number = 1
if message.text == 'Бассейн №2':
await bot.send_message(message.from_user.id, 'Введи расстояние до воды №2.')
lake_number = 2
if bool(lake_number) and message.text.isdigit():
b = int(message.text)
if lake_number == 1:
h = 8 - b
v = (h / 3)
level = v / 16000 * 100 # тут в формуле где-то ошибка, поэтому я ее просто убрал
await bot.send_message(message.from_user.id,
str("Количество:" + str(v) + "м3. Глубина:" + str(h) + "м. Наполнение: " + str(
level) + "%"))
if lake_number == 2:
h2 = 5 - ((b - 1) * float(0.7))
s2 = (90 - (b * 0.52)) * (100 - (b * 0.52)) / 2
n = sqrt(2500 * s2)
s1 = 1
g = s1 + n + s2
v2 = (h2 / 3) * g
level2 = v2 / 17000 * 100
await bot.send_message(message.from_user.id,
str("Количество:" + str(v2) + "м3. Глубина:" + str(h2) +
"м. Наполнение: " + str(level2) + "%"))
lake_number = 0
await bot.send_message(message.from_user.id, "Попробуй еще...")
каждый вызов я ее личные переменные приравниваю к общим, изменяю так же
isLogin = 0
r = 1
def testf():
print(isLogin)
if isLogin == 0:
print(1)
testf()
isLogin = 0
r = 1
def testf():
if r == 0:
isLogin = 1 # тут ты объявляешь внутреннюю переменную, которая перекрывает глобальную.
if isLogin == 0:
print(1)
testf()
r = 1
def testf():
isLogin = 0
if r == 0:
isLogin = 1
if isLogin == 0:
print(1)
testf()
isLogin = 0
r = 1
def testf():
global isLogin
if r == 0:
isLogin = 1
if isLogin == 0:
print(1)
testf()
from telethon import utils
real_id, peer_type = utils.resolve_id(-1001234567891)
print(real_id) # 1234567891
print(peer_type) # <class 'telethon.tl.types.PeerChannel'>
peer = peer_type(real_id)
print(peer) # PeerChannel(channel_id=1234567891)
Ohh. Now I read the original issue more carefully (sorry!). Indeed that documentation line is wrong. .get_input_entity is intended when you're going to use the input version of something, not to just get the ID. If you just want the ID of yourself you should use client.get_me(input_peer=True).user_id instead. It should not be changed though because the method is fine, it returns an InputPeer (which might not have the ID).