Разработан набросок чат-бота

Этот коммит содержится в:
Глеб Иваницкий 2024-08-12 17:25:30 +03:00
Коммит a763de4335
7 изменённых файлов: 183 добавлений и 0 удалений

1
bot/__init__.py Обычный файл
Просмотреть файл

@ -0,0 +1 @@
from .main import dp, bot

143
bot/main.py Обычный файл
Просмотреть файл

@ -0,0 +1,143 @@
import asyncio
from aiogram import Bot, Dispatcher
from aiogram.client.default import DefaultBotProperties
from aiogram.enums import ParseMode
from aiogram.filters import CommandStart
from aiogram.types import Message, Poll, InputPollOption
from apscheduler.schedulers.asyncio import AsyncIOScheduler
import config
dp = Dispatcher()
loop = asyncio.get_event_loop()
@dp.message(CommandStart())
async def command_start_handler(
message: Message,
):
print(message.chat.id)
await message.answer('Чат успешно зарегистрирован!')
bot = Bot(
token=config.Telegram.token,
default=DefaultBotProperties(
parse_mode=ParseMode.HTML,
),
)
scheduler = AsyncIOScheduler()
async def send_mood_poll() -> Poll:
await bot.send_poll(
chat_id=-1002246469549,
question='Оцените свое состояние на текущую минуту',
options=[
InputPollOption(
text='😄',
),
InputPollOption(
text='🤪',
),
InputPollOption(
text='🫠',
),
InputPollOption(
text='☠️',
),
InputPollOption(
text='🤡',
),
InputPollOption(
text='😟',
),
InputPollOption(
text='😩',
),
InputPollOption(
text='😡',
),
],
is_anonymous=False,
allows_multiple_answers=False,
is_closed=False,
disable_notification=True,
)
async def send_dinner_poll() -> Poll:
message = await bot.send_poll(
chat_id=-1002246469549,
question='Какие у вас планы на обед?',
options=[
InputPollOption(
text='🍽️ Пойду в общепит',
),
InputPollOption(
text='📦 Хочу заказать в офис',
),
InputPollOption(
text='🥪 Всё своё ношу с собой',
),
InputPollOption(
text='😴 Хочу спать',
),
],
is_anonymous=False,
allows_multiple_answers=False,
is_closed=False,
disable_notification=True,
)
return message.poll
async def send_dinner_delivery_poll() -> Poll:
await bot.send_poll(
chat_id=-1002246469549,
question='Где будем заказывать?',
options=[
InputPollOption(
text='Dark Side',
),
InputPollOption(
text='Самокат',
),
InputPollOption(
text='...',
),
InputPollOption(
text='...',
),
],
is_anonymous=False,
allows_multiple_answers=False,
is_closed=False,
disable_notification=True,
)
async def on_startup(
dispatcher: Dispatcher,
):
scheduler.add_job(
func=send_mood_poll,
trigger='cron',
day_of_week='mon-fri',
hour=17,
minute=14,
)
scheduler.add_job(
func=send_dinner_poll,
trigger='cron',
day_of_week='mon-fri',
hour=17,
minute=17,
)
scheduler.start()
dp.startup.register(on_startup)

1
config/__init__.py Обычный файл
Просмотреть файл

@ -0,0 +1 @@
from .main import Telegram

19
config/main.py Обычный файл
Просмотреть файл

@ -0,0 +1,19 @@
from configparser import RawConfigParser
import os
cwd = os.getcwd()
config = RawConfigParser()
config.read(
filenames=os.path.join(
cwd,
'config.ini',
),
)
class Telegram:
token = config.get(
section='Telegram',
option='token',
)

9
database.sql Обычный файл
Просмотреть файл

@ -0,0 +1,9 @@
create table polls (
id bigint not null,
date date not null,
is_complete boolean default false not null,
primary key (id)
);
create table mood_polls () inherits (polls);
create table dinner_polls () inherits (polls);

7
main.py Обычный файл
Просмотреть файл

@ -0,0 +1,7 @@
import asyncio
from bot import bot, dp
if __name__ == "__main__":
asyncio.run(dp.run_polling(bot))

3
requirements.txt Обычный файл
Просмотреть файл

@ -0,0 +1,3 @@
aiogram
APScheduler
psycopg[binary]