当您从 GitHub 下载并打开存档时,会出现一堆不同的文件和文件夹。我正是需要它just-validate.min.js
。
PS 别像达斯那样自作聪明,说废话。程序员会立即理解这个问题,并且不会说“重命名任何文件以进行验证”。
当您从 GitHub 下载并打开存档时,会出现一堆不同的文件和文件夹。我正是需要它just-validate.min.js
。
PS 别像达斯那样自作聪明,说废话。程序员会立即理解这个问题,并且不会说“重命名任何文件以进行验证”。
我margin
在主结构中添加了卡片,但是复制它时,所有卡片都会向下移动,但我需要它们按顺序向左移动,如果没有空间,则在底部。如何实施?
.card {
background-color: #eeeded;
width: 175px;
border-radius: 20px;
padding: 20px 10px;
box-shadow: 10px 10px 20px rgba(67, 64, 64, .4);
margin: 80px 100px;
}
.card-img {
border-radius: 11px;
/*margin-right: 100px;*/
}
.card-title {
margin-top: 20px;
font-size: 14px;
font-weight: 501;
}
.card-description {
font-size: 12px;
font-weight: 300;
margin-top: 20px;
}
.btn-keeper {
margin-top: 20px;
text-align: center;
}
.btn-add {
/*padding: 7px 12px;*/
/*margin-right: 500px;*/
color: red;
background-color: #EEEDEDFF;
border-radius: 10px;
}
.btn-delete-from-cart {
color: red;
background-color: #EEEDEDFF;
border-radius: 10px;
}
.btn-delete-from-cart:hover {
color: red;
}
.btn-add:hover {
color: red;
}
<div class="product-card">
<!-- wrapper -->
<div class="card">
<img class="card-img" src="menu/6za700.jpg">
<div class="card-title">6 за 700</div>
<div class="card-description">3 крылышка, 3 стрипса. картошка фри, соус барбекью .кола 0,33. твистер с курей</div>
<div class="btn-keeper">
<a href="#" class="btn-delete-from-cart">
<ion-icon name="remove-circle-outline"></ion-icon>
</a>
<a href="#" class="btn-add">
<ion-icon name="add-circle-outline"></ion-icon>
</a>
</div>
</div>
</div>
这是我的代码,但我不明白如何正确对齐数字的边缘,因为...... 如果写的数字很大,就会出界。我重新编写了代码,但最终没有任何效果,它给出了错误。代码中还有一个注释掉的部分可以工作,但您需要以某种方式将其与边缘对齐。这是代码:
a = str(input()) # Название
b = int(input()) # Цена
c = int(input()) # Вес
d = int(input()) # Кол-во денег
#print(f'{"Чек":=^32}\nТовар:{"": >30}{a}\nЦена:{"": >30}{c}кг * {b}руб/кг\nИтого:{"": >30}{(b*c)}руб\nВнесено:{"": >30}{d}руб\nСдача:{"": >30}{(d-b*c)}руб\n{"":=^35}')
print(f'{"Чек":=^32}')
print(f'Товар:{"": ^{(a)}}{a}')
print(f'Цена:{"": ^{(b)}}{(c)}кг * {(b)}руб/кг')
print(f'Итого:{"": ^{(b*c)}}{(b*c)}руб')
print(f'Внесено:{"": ^{(d)}}{(d)}руб')
print(f'Сдача:{"": ^{(d-b*c)}}{(d-b*c)}руб')
print(f'{"":=^32}')
UPD:我更改了代码,但它仍然不对齐
a = str(input()) # Название
b = int(input()) # Цена
c = int(input()) # Вес
d = int(input()) # Кол-во денег
print(f'{"Чек":=^35}')
print(f'{"Товар:": <35}{a}')
print(f'{"Цена:": <35}{c}кг * {b}кг/руб')
print(f'{"Итого:": <35}{b*c}руб')
print(f'{"Внесено:": <35}{d}')
print(f'{"Сдача": <35}{d-b*c}')
print(f'{"":=^35}')
只显示一行,我现在只有 2 行。这是我用来显示密码的代码:
db.conn.execute('select password from accounts').fetchall()[0]
仅显示我的密码。
我做了一个猜数字的游戏,由于我需要在不同的地方做同样的检查,所以我决定研究一下函数和程序。我做了一个函数,如果一个玩家的尝试次数小于或等于0,那么他会写You has run out of attempts, restart...,但是当尝试次数用完时,这个短语会被写两次。这是代码:
uses crt;
label restart;
procedure wrn(text: string);
begin
writeln(text);
end;
function check1(at: integer): boolean;
var abc: boolean;
begin
if at <= 0 then begin
wrn('У вас закончились попытки!');
wrn('Перезапуск...');
check1 := True;
{print(at);}
end
else check1 := False;
{print(at);}
end;
begin
randomize;
var _restart: boolean;
var _attempts: integer;
restart: _restart := False;
_attempts := 10;
var random_number := random(100);
{print(random_number);}
var a := ReadInteger('Введите любое число от 1 до 100: ');
if a > 100 then begin
wrn('Вы написали число больше 100!');
_restart := True;
goto restart;
end;
while _restart <> True do
begin
var b := ReadInteger('Угадывайте: ');
if b > random_number then begin
check1(_attempts);
if check1(_attempts) = True then begin
goto restart;
end;
_attempts := _attempts - 1;
wrn('Ваше число больше загаданного.');
end;
if b < random_number then begin
check1(_attempts);
if check1(_attempts) = True then begin
goto restart;
end;
_attempts := _attempts - 1;
wrn('Ваше число меньше загаданного.');
end;
if b = random_number then begin
wrn('Вы угадали число!');
wrn('Перезапуск...');
_restart := True;
goto restart;
end;
end;
end.
请不要完全重做代码,只需重做我犯错误的地方即可。剩下的你就简单指出来,方便我以后研究。先感谢您!
昨天我做了一个计算器,点击检查代码健康按钮,发现由于设计过时,我的健康状况有 64%。我阅读了官方文档并重写了代码。现在代码的健康度显示为134%,但是当输入符号时,重新启动程序后,检查正确输入符号的功能将重新启动两次,然后您可以再次使用该程序。这是输出:
Введите знак(/,*,+,-): *
Введите первое число: 1
Введите второе число: 2
Ответ: 2
Введите знак(/,*,+,-): Вы используете несуществующий символ для вычисления!
Введите знак(/,*,+,-): Вы используете несуществующий символ для вычисления!
Введите знак(/,*,+,-):
更新的代码:
{program calculator;}
label restart;
begin
var rest: integer;
restart: rest := 0;
while rest <> 1 do
begin
var sign := ReadChar('Введите знак(/,*,+,-):');
if (sign <> '-') and (sign <> '+') and (sign <> '/') and (sign <> '*') then begin
writeln('Вы используете несуществующий символ для вычисления!');
goto restart;
end;
var a := ReadInteger('Введите первое число: ');
var b := ReadInteger('Введите второе число: ');
if sign = '+' then begin
writeln('Ответ: ', a + b);
end;
if sign = '-' then begin
writeln('Ответ: ', a - b);
end;
if sign = '/' then begin
if b <> 0 then begin
writeln('Ответ: ', a / b);
end
else
writeln('Нельзя делить на 0!');
goto restart;
end;
if sign = '*' then begin
writeln('Ответ: ', a * b);
end;
end;
end.
我做了一个选择性计算器,即 您可以在其中选择计算的符号和数字,为了避免输入符号时出现错误,我决定进行一项检查,如果sign <> 'знак'
,而不是我有 +、- 等的“符号”。 ,但即使输入正确,检查每次都会起作用。问题是什么?代码:
program test;
label restart;
var
a,b,signnum,rest:integer;
sign:string;
begin
restart: rest := 0;
while rest <> 1 do
begin
a := 0;
b:=0;
sign:='';
writeln('Введите знак(/,*,+,-):');
readln(sign);
if (sign <> '-') or (sign <> '+') or (sign <> '/') or (sign <> '*') then
begin
writeln('Вы используете несуществующий символ для вычисления!');
goto restart;
end
else
continue;
writeln('Введите первое число: ');
readln(a);
writeln('Введите второе число: ');
readln(b);
if sign = '+' then
begin
writeln(a+b);
end;
if sign = '-' then
begin
writeln(a-b);
end;
if sign = '/' then
begin
writeln(a/b);
end;
if sign = '*' then
begin
writeln(a*b);
end;
end;
end.
我做了一项检查,应该更改用户状态:
async def status_up(msg: Message):
print('started')
status = db.status(msg.from_user.id).fetchone()[0] # Какой статус на данный момент
refs = db.count_referals(msg.from_user.id).fetchone()[0] # Кол-во рефов
states = ['🔸 Гость', '🔸 Новичек', '🥉 Освоившийся', '🥈 Профессионал', '🌟 Просветлённый', '🎖 Ветеран', '🏆PREMIUM'] # Список со статусами
frase= msg.answer(f'Ваш статус был повышен! Подробнее в вашем профиле.\nВаш новый статус - {status}')
# Если статус еще не равен первому в списке, ранг равен 1 и рефералов 0, то начисляется
# новый статус и всякие плюшки(см. ниже)
if status != states[0] and db.rang(msg.from_user.id).fetchone()[0]==1 and refs == 0:
db.status(msg.from_user.id, status=1)
await frase
db.RPC(msg.from_user.id, count=0.01) # Кол-во заработка
db.clicks(msg.from_user.id, limit=100) # Кол-во кликов
if status != states[1] and db.rang(msg.from_user.id).fetchone()[0]==2 and refs == 3:
db.status(msg.from_user.id, status=2)
await frase
db.RPC(msg.from_user.id, count=0.07)
db.clicks(msg.from_user.id, limit=100)
if status != states[2] and db.rang(msg.from_user.id).fetchone()[0]==3 and refs == 5:
db.status(msg.from_user.id, status=3)
await frase
db.RPC(msg.from_user.id, count=0.14)
db.clicks(msg.from_user.id, limit=150)
if status != states[3] and db.rang(msg.from_user.id).fetchone()[0]==4 and refs == 25:
db.status(msg.from_user.id, status=4)
await frase
db.RPC(msg.from_user.id, count=0.25)
db.clicks(msg.from_user.id, limit=150)
if status != states[4] and db.rang(msg.from_user.id).fetchone()[0]==5 and refs == 75:
db.status(msg.from_user.id, status=5)
await frase
db.RPC(msg.from_user.id, count=0.33)
db.clicks(msg.from_user.id, limit=200)
if status != states[5] and db.rang(msg.from_user.id).fetchone()[0]==6 and refs == 120:
db.status(msg.from_user.id, status=6)
await frase
db.RPC(msg.from_user.id, count=0.40)
db.clicks(msg.from_user.id, limit=200)
if status != states[6] and db.rang(msg.from_user.id).fetchone()[0]==7 and refs == 350:
db.status(msg.from_user.id, status=7)
await frase
db.RPC(msg.from_user.id, count=0.55)
db.clicks(msg.from_user.id, limit=275)
# Цикл который я запускаю для запуска функции
async def test(msg: Message):
while True:
print('working...')
await status_up(msg)
await asyncio.sleep(1)
这是我用来更改数据库中的状态的代码:
def status(self, usd, status=None):
'''Смена статуса для пользователей'''
states = ['🔸 Гость','🔸 Новичек','🥉 Освоившийся','🥈 Профессионал','🌟 Просветлённый','🎖 Ветеран', '🏆PREMIUM']
if status is not None:
if status == 1:
self.cur.execute(f"UPDATE users SET status =? WHERE user_id=?", (states[0], usd))
return self.conn.commit()
elif status == 2:
self.cur.execute(f"UPDATE users SET status =? WHERE user_id=?", (states[1], usd))
return self.conn.commit()
elif status == 3:
self.cur.execute(f"UPDATE users SET status =? WHERE user_id=?", (states[2], usd))
return self.conn.commit()
elif status == 4:
self.cur.execute(f"UPDATE users SET status =? WHERE user_id=?", (states[3], usd))
return self.conn.commit()
elif status == 5:
self.cur.execute(f"UPDATE users SET status =? WHERE user_id=?", (states[4], usd))
return self.conn.commit()
elif status == 6:
self.cur.execute(f"UPDATE users SET status =? WHERE user_id=?", (states[5], usd))
return self.conn.commit()
elif status == 7:
self.cur.execute(f"UPDATE users SET status =? WHERE user_id=?", (states[6], usd))
return self.conn.commit()
else:
"""Выводит значение в остальных случаях"""
return self.conn.execute("SELECT status FROM users WHERE user_id=?", (usd,))
它不会显示任何错误,机器人通常在运行此功能后即可工作,到目前为止我在 /start 中运行它,你能告诉我如何在机器人启动时运行检查吗?先感谢您!
我正在尝试使用以下方式发送.txt
文件:
@router.message(Command(commands='test', prefix='!'))
async def abbreviatures(msg: Message):
await msg.answer('text')
with open('ab.txt', 'rb') as file:
await msg.answer_document(file)
但它给出了这个错误:
ValidationError: 2 validation errors for SendDocument
document.is-instance[InputFile]
Input should be an instance of InputFile [type=is_instance_of, input_value=<_io.BufferedReader name='ab.txt'>, input_type=BufferedReader]
For further information visit https://errors.pydantic.dev/2.5/v/is_instance_of
document.str
Input should be a valid string [type=string_type, input_value=<_io.BufferedReader name='ab.txt'>, input_type=BufferedReader]
For further information visit https://errors.pydantic.dev/2.5/v/string_type
Traceback (most recent call last):
File "C:\Users\Danil\AppData\Local\Programs\Python\Python38\lib\site-packages\aiogram\dispatcher\dispatcher.py", line 309, in _process_update
response = await self.feed_update(bot, update, **kwargs)
File "C:\Users\Danil\AppData\Local\Programs\Python\Python38\lib\site-packages\aiogram\dispatcher\dispatcher.py", line 158, in feed_update
response = await self.update.wrap_outer_middleware(
File "C:\Users\Danil\AppData\Local\Programs\Python\Python38\lib\site-packages\aiogram\dispatcher\middlewares\error.py", line 25, in __call__
return await handler(event, data)
File "C:\Users\Danil\AppData\Local\Programs\Python\Python38\lib\site-packages\aiogram\dispatcher\middlewares\user_context.py", line 27, in __call__
return await handler(event, data)
File "C:\Users\Danil\AppData\Local\Programs\Python\Python38\lib\site-packages\aiogram\fsm\middleware.py", line 41, in __call__
return await handler(event, data)
File "C:\Users\Danil\AppData\Local\Programs\Python\Python38\lib\site-packages\aiogram\dispatcher\event\telegram.py", line 121, in trigger
return await wrapped_inner(event, kwargs)
File "C:\Users\Danil\AppData\Local\Programs\Python\Python38\lib\site-packages\aiogram\dispatcher\event\handler.py", line 43, in call
return await wrapped()
File "C:\Users\Danil\AppData\Local\Programs\Python\Python38\lib\site-packages\aiogram\dispatcher\dispatcher.py", line 276, in _listen_update
return await self.propagate_event(update_type=update_type, event=event, **kwargs)
File "C:\Users\Danil\AppData\Local\Programs\Python\Python38\lib\site-packages\aiogram\dispatcher\router.py", line 128, in propagate_event
return await observer.wrap_outer_middleware(_wrapped, event=event, data=kwargs)
File "C:\Users\Danil\AppData\Local\Programs\Python\Python38\lib\site-packages\aiogram\dispatcher\router.py", line 123, in _wrapped
return await self._propagate_event(
File "C:\Users\Danil\AppData\Local\Programs\Python\Python38\lib\site-packages\aiogram\dispatcher\router.py", line 156, in _propagate_event
response = await router.propagate_event(update_type=update_type, event=event, **kwargs)
File "C:\Users\Danil\AppData\Local\Programs\Python\Python38\lib\site-packages\aiogram\dispatcher\router.py", line 128, in propagate_event
return await observer.wrap_outer_middleware(_wrapped, event=event, data=kwargs)
File "C:\Users\Danil\AppData\Local\Programs\Python\Python38\lib\site-packages\aiogram\dispatcher\router.py", line 123, in _wrapped
return await self._propagate_event(
File "C:\Users\Danil\AppData\Local\Programs\Python\Python38\lib\site-packages\aiogram\dispatcher\router.py", line 148, in _propagate_event
response = await observer.trigger(event, **kwargs)
File "C:\Users\Danil\AppData\Local\Programs\Python\Python38\lib\site-packages\aiogram\dispatcher\event\telegram.py", line 121, in trigger
return await wrapped_inner(event, kwargs)
File "C:\Users\Danil\AppData\Local\Programs\Python\Python38\lib\site-packages\aiogram\dispatcher\event\handler.py", line 43, in call
return await wrapped()
File "C:\Users\Danil\Desktop\Bot translator\handlers.py", line 35, in abbreviatures
await msg.answer_document(photo)
File "C:\Users\Danil\AppData\Local\Programs\Python\Python38\lib\site-packages\aiogram\types\message.py", line 1182, in answer_document
return SendDocument(
File "C:\Users\Danil\AppData\Local\Programs\Python\Python38\lib\site-packages\pydantic\main.py", line 164, in __init__
__pydantic_self__.__pydantic_validator__.validate_python(data, self_instance=__pydantic_self__)
pydantic_core._pydantic_core.ValidationError: 2 validation errors for SendDocument
document.is-instance[InputFile]
我做了这个代码:
@router.message()
async def message_censore(msg: Message):
with open('sensore.txt', 'r') as f:
censored_letters = [line.strip() for line in f]
if str(censored_letters) in msg.text:
await msg.delete()
但只有当censored_letters
您将其替换为引号中的单词时,它才有效,例如'мат'
。我尝试显示一个列表,所有单词都已导入。
我正在制作一个主持人机器人,我需要一个在机器人启动时进行所有必要检查的功能,但问题是在启动检查的功能中,msg: Message
如果使用启动则无法通过if __name__ == '__main__':
。我尝试在内部创建一个函数if __name__ == '__main__'
,并认为它会自行启动,但机器人只是关闭了。这是机器人启动代码:
async def main(msg: Message):
bot = Bot(token=config.bot_token)
dp = Dispatcher(storage=MemoryStorage())
dp.include_router(router)
await bot.delete_webhook(drop_pending_updates=True)
await handlers.bot_started_check(msg) # Для запуска нужно передавать msg
print('Бот запущен')
await dp.start_polling(bot, allowed_updates=dp.resolve_used_update_types(), on_startup=DB.bot_startup(1), on_shutdown=DB.bot_startup(0))
if __name__ == '__main__':
async def start(msg: Message):
logging.basicConfig(level=logging.INFO)
asyncio.run(main(msg))
我不知道如何解决它。
更新:代码handlers.py
from aiogram import types, F, Router
from aiogram.types import Message
from aiogram.filters import Command
from aiogram.fsm.state import State, StatesGroup
from aiogram.fsm.context import FSMContext
from aiogram.types.message import ContentType
from aiogram.filters import ADMINISTRATOR, IS_ADMIN, IS_MEMBER, IS_NOT_MEMBER
from aiogram import Bot
import asyncio
from database import ModerDB
import pydantic_core
DB = ModerDB('DB.db')
import config
import swears
bot = Bot(token=config.bot_token)
router = Router()
async def bot_started_check(msg: Message):
while True:
if DB.bot_startup().fetchone()[0] == 1:
await bot.send_message(msg.chat.id,'Бот включен')
pass
else:
await bot.send_message(msg.chat.id, 'Бот выключен')
await asyncio.sleep(1)
async def bot_stopped(msg: Message):
if DB.bot_startup().fetchone()[0] != 1:
await bot.send_message(msg.chat.id, 'Бот выключен.')
@router.message(Command(commands='start', prefix='!'))
async def start(msg: Message):
if not DB.bot_exist(bot.id):
DB.bot_activate(bot.id)
await bot.send_message(msg.chat.id, 'Бот был активирован✅')
await bot_started_check(msg)
@router.message(Command(commands='админ1', prefix='+'))
async def prefix(msg: Message):
member_name = ' '.join(msg.text.split()[1:])
if DB.username_exist(member_name):
await bot.send_message(msg.from_user.id, f'Участник {member_name} стал администратором первого уровня.')
else:
await bot.send_message(msg.chat.id, 'Учатник не найден.')
await bot.set_chat_administrator_custom_title(msg.chat.id, msg.reply_to_message.from_user.id, f'{member_name}')
@router.message(F.text, lambda msg: any(x in msg.text.lower().replace("ё", "е") for x in swears.swears))
async def censure(msg: Message):
await msg.delete()
await msg.answer("Без мата, пожалуйста ⛔")
我通过 HowdyHo 视频付款,我写了所有内容,但它给出了错误 unsupporte callable。包含错误的代码:
@router.message(ContentType.SUCCESSFUL_PAYMENT)
async def succ_pay(msg: Message):
paymentinfo = msg.successful_payment.provider_payment_charge_id # Здесь должно быть .to_python() но я не знаю как это выглядит в aoigram3.3.0
for k, v in paymentinfo:
print(f'{k} = {v}')
await bot.send_message(msg.chat.id, f'Платеж на сумму {msg.successful_payment.total_amount // 100} {msg.successful_payment.currency} прошёл успешно!')
#DB.status_up(msg.from_user.id, 8)
#await rang_up(msg)
错误:
Traceback (most recent call last):
File "C:\Users\Danil\AppData\Local\Programs\Python\Python38\lib\inspect.py", line 1123, in getfullargspec
sig = _signature_from_callable(func,
File "C:\Users\Danil\AppData\Local\Programs\Python\Python38\lib\inspect.py", line 2216, in _signature_from_callable
raise TypeError('{!r} is not a callable object'.format(obj))
TypeError: <ContentType.SUCCESSFUL_PAYMENT: 'successful_payment'> is not a callable object
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "C:\Users\Danil\Desktop\So2 bot\main.py", line 10, in <module>
from handlers import router
File "C:\Users\Danil\Desktop\So2 bot\handlers.py", line 368, in <module>
async def succ_pay(msg: Message):
File "C:\Users\Danil\AppData\Local\Programs\Python\Python38\lib\site-packages\aiogram\dispatcher\event\telegram.py", line 138, in wrapper
self.register(callback, *filters, flags=flags, **kwargs)
File "C:\Users\Danil\AppData\Local\Programs\Python\Python38\lib\site-packages\aiogram\dispatcher\event\telegram.py", line 87, in register
filters=[FilterObject(filter_) for filter_ in filters],
File "C:\Users\Danil\AppData\Local\Programs\Python\Python38\lib\site-packages\aiogram\dispatcher\event\telegram.py", line 87, in <listcomp>
filters=[FilterObject(filter_) for filter_ in filters],
File "<string>", line 4, in __init__
File "C:\Users\Danil\AppData\Local\Programs\Python\Python38\lib\site-packages\aiogram\dispatcher\event\handler.py", line 72, in __post_init__
super(FilterObject, self).__post_init__()
File "C:\Users\Danil\AppData\Local\Programs\Python\Python38\lib\site-packages\aiogram\dispatcher\event\handler.py", line 30, in __post_init__
spec = inspect.getfullargspec(callback)
File "C:\Users\Danil\AppData\Local\Programs\Python\Python38\lib\inspect.py", line 1132, in getfullargspec
raise TypeError('unsupported callable') from ex
TypeError: unsupported callable
我正在为机器人制作一个禁止命令,我发现了一篇文章,其中禁止命令是通过FSMContext
. 一眼就能看出aiogram
它已经老了。这是我重写的一段代码:
@dp.message_handler(content_types=['text'], text='Добавить в ЧС')
async def hanadler(message: types.Message, state: FSMContext):
if message.chat.id == ADMIN:
keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True)
keyboard.add(types.InlineKeyboardButton(text="Назад"))
await message.answer('Введите id пользователя, которого нужно заблокировать.\nДля отмены нажмите кнопку ниже', reply_markup=keyboard)
await dialog.blacklist.set() # Вот здесь подсвечивается жёлтым
当你将鼠标悬停在它上面时,set()
它说模块中没有这个属性State
。如何更换?我用编辑器PyCharm
。以防万一,带有教程的文章的链接 - https://habr.com/ru/articles/599199/
我做了一个代码:如果你在聊天中写入смс
,用户输入的短语应该发送给管理员
def sms(message):
bot.send_message(message.chat.id, '❗ПРЕДУПРЕЖДЕНИЕ:❗\nПри спаме вы навсегда потеряете доступ к боту на данном аккаунте!')
bot.send_message(message.chat.id, 'Напишите вашу идею для проекта.')
bot.register_next_step_handler(message, sms_global)
return
def sms_global(message):
user_guess = message.text
print('Кто-то отправил вам смс')
bot.send_message(config_reader.admin_id, user_guess)
print(user_guess)
return
但该消息会被发送回撰写该消息的用户。是否可以用一小行代码来实现这一点,以免欺骗您的头脑?机器人一般只需要发送媒体文件,并且需要此功能以便用户可以发送项目想法。
我什至延迟了 1 秒,由于某种原因,机器人每隔一段时间就发送一次文件,而没有给出错误。
def download(message):
markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
btn_stop = types.KeyboardButton('🛑Отмена🛑')
markup.add(btn_stop)
bot.send_message(message.chat.id, 'Для начала нужно узнать код с помощью фразы "Посмотреть список документаций".\nЕсли вы это не сделали, нажмите на кнопку "🛑Отмена🛑"', reply_markup=markup)
bot.send_message(message.chat.id, 'Введите код проекта:')
BotDB.btn('update_1', message.from_user.id)
bot.register_next_step_handler(message, download_global)
return
def download_global(message):
global codes
user_input = message.text
try:
if str(user_input) == 'Отмена' or user_input == '🛑Отмена🛑':
BotDB.btn('update_0', message.from_user.id)
buttons(message)
return
elif int(user_input) in codes:
if int(user_input) == codes[0]:
bot.send_message(message.chat.id, 'С вашего счёта списано 0 рублей')
bot.send_message(message.from_user.id, 'Проект по выбранному проекту:')
with open('tutorial/goroda.docx', 'rb') as file:
time.sleep(1)
bot.send_document(message.from_user.id, file)
buttons(message)
return
else:
bot.send_message(message.chat.id, 'Проекта с таким id не существует!')
bot.register_next_step_handler(message, download_global)
return
except ValueError:
bot.send_message(message.chat.id, 'Возникла ошибка. Возможно вы написали букву вместо цифры!\nМожете прямо сейчас повторить попытку')
bot.register_next_step_handler(message, download_global)
return
代码:
def check_codes(message):
projects = ['aa','bb','cc']
for i in range(len(projects)):
b = f"id: {i}, {projects[i]}"
bot.send_message(message.chat.id, f'{b}\n*Текст*')
我需要在编号后将列表中的所有值projects
显示在一条消息中并转移到新行。上面的代码只记住变量 b 中的最后一个值并显示它。我需要如何对所有名称进行编号才能将它们显示在一条消息中?
模块 -telebot
版本python 3.12
我用UPDATE
、 、执行了不同的命令SELECT
,INSERT
并且不理解光标和 conn 之间的区别。两者的工作原理相同。你能解释一下吗
我有两个文件,一个是数据库文件,另一个是主文件。在主文件中,有两个函数负责更改 attempts 变量。但是如果我使用此代码保存到尝试数据库:
def set_attempts(self, attempts):
self.cursor.execute('''INSERT INTO users (attempts) VALUES (?)''', (attempts,))
return self.conn.commit()w
PS 然后数据库中没有任何更新。print(get_init_storage(message.from_user.id))
在调用数据库写入函数之前和之后,我使用它显示数据库中的数据进行了检查。这是函数代码:
def get_init_storage(self, user_id):
result = self.conn.execute('''SELECT id,user_id,username, random_num,dev_mode_on, attempts, rand_one, rand_two FROM users WHERE user_id=?''', (user_id,)).fetchone()
return result
同样在带有数据库的文件中,在保存到数据库尝试的功能中,我设置了print(attempts)
,它显示了我写入的值,但是在输出时,get_init_storage(message.from_user.id)
保留了相同的值,并且程序SqliteStudio
创建了一个带有 user_id、user_name 值的新配置文件NULL,但我设置的尝试发生了变化:
以下是在主文件中保存 attempts 变量的代码:
<@bot.message_handler(commands=['setattempts'])
def set_attempts(message):
bot.send_message(message.chat.id, 'Введите новое кол-во попыток:')
bot.register_next_step_handler(message, set_attempts_global)
def set_attempts_global(message):
user_guess = message.text
if not user_guess.isdigit():
msg = bot.reply_to(message, '❌Ошибка!❌\nВведите числo, а не буквы!')
bot.register_next_step_handler(msg, set_attempts_global)
return
if int(user_guess) != 0:
global attempts_default
attempts = int(user_guess)
attempts = BotDB.set_attempts(attempts) # не работает
BotDB.set_attempts(attempts) # не работает
attempts_default = attempts
bot.send_message(message.chat.id, f'✅Попытки успешно изменены✅\nНовое кол-во попыток: {attempts}')
print('------------------------------------')
print('attempts updated')
print(BotDB.get_data_storage(message.from_user.id))
print('------------------------------------')
else:
print('------------------------------------')
print('attempts loose update')
print(BotDB.get_data_storage(message.from_user.id))
print('------------------------------------')
msg = bot.reply_to(message, '❌Ошибка!❌\nНельзя поставить число 0!')
bot.register_next_step_handler(msg, set_attempts_global)
return>
我使用模块telebot
,sqlite3
. Python版本:python 3.12
我制作了一个猜测数字的机器人,一切正常,但我有一个功能可以更改数字生成范围并更改尝试次数,如果两个人正在玩,其中一个人更改了尝试或范围,那么它将为每个人带来改变。
这是我将其保存到字典中的代码,它是一个集成的数据库。
storage = dict()
def init_storage(user_id):
storage[user_id] = dict(attemps=None, random_num=None)
def set_init_storage(user_id, key,value):
storage[user_id][key] = value
def get_init_storage(user_id):
return storage[user_id]
这就是我在这个集成数据库中记录值的方式:
set_init_storage(message.chat.id, 'a', default_a)
set_init_storage(message.chat.id, 'b', default_b)
它们的输出使用:
get_init_storage(message.chat.id) # Получает все значения сразу
get_init_storage(message.chat.id)['attempts'] # Получает одно значение, если ввести его название в квадратные скобы
PS 如何正确创建表格,我的意思是放置哪些复选框。
我需要此设置来尝试、范围、用户名。
我使用该模块telebot
,sqlite3
python版本是3.12
我正在创建代码以允许用户自己选择随机数选择范围。a
我尝试在b
命令函数本身中创建变量并使用 分隔它们split(',')
。它仍然给出一个错误。
@bot.message_handler(commands=['setrange'])
def set_range(message):
# global random_num
# global a
# global b
#user_guess = message.text
send = bot.send_message(message.chat.id, 'Введите от какого числа до какого будет
генерироваться число в формате [от, до]:')
bot.register_next_step_handler(send, set_range_global)
def set_range_global(message):
#global random_num
#global a, b
user_guess = int(message.text)
a, b = map(float(int, user_guess.split(', ')))
bot.reply_to(message, a,b)
user_guess = message.text
arr = list(map(int, user_guess.split(',')))
if int(user_guess) != arr[0] and int(user_guess) != arr[1]:
default_a = a
default_b = b
bot.send_message(message.chat.id, f'Диапазон генерирования числа успешно
изменен!\nНовый диапазон: {a, b}')
default_a
这些是输入命令时的默认default_b
值的变量a
b
/start
错误:
"C:\Users\Danil\AppData\Local\Programs\Python\Python312\Lib\site-packages\telebot\util.py", line 90, in run
task(*args, **kwargs)
File "C:\Users\Danil\Desktop\Tg_game\main.py", line 66, in
set_range_global
a, b = map(float(int, user_guess.split(', ')))
^^^^^^^^^^^^^^^^
AttributeError: 'int' object has no attribute 'split'