Last active
December 3, 2017 11:10
-
-
Save avdotion/1c830897f9c03e3ac4ecba9526808cc7 to your computer and use it in GitHub Desktop.
Общажный бот (Telegram Bot)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import telebot | |
import datetime | |
import random | |
import time | |
token = '' | |
bot = telebot.TeleBot(token) | |
# Идентификаторы чатов, для которых разрешен доступ | |
ACCESS_CHAT_ID = {-1001093224903, 126491903} | |
# Служебный список для отображения месяцев | |
MONTHS = ['Января', | |
'Февраля', | |
'Марта', | |
'Апреля', | |
'Мая', | |
'Июня', | |
'Июля', | |
'Августа', | |
'Сентября', | |
'Октября', | |
'Ноября', | |
'Декабря'] | |
# Служебный список для отображения дня недели | |
WEEKDAYS = ['Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота', 'Воскресенье'] | |
# Список всех воспитателей в правильном порядке следования | |
MENTORS = ['Воспетка 1', 'Воспетка 2', 'Воспетка 3'] | |
# Список комнаты | |
BOYS = ['Данила', 'Артем', 'Антон', 'Илья'] | |
# Фразы, которые будут рандомно вываливаться при вызове случайного человека | |
RANDOM_SHITS = ['Случайный кент'] | |
# Название вашего чата | |
TITLE = 'CHAT_NAME' | |
# Дни недели, в которые вы выносите мусор (от 0 до 6) | |
TRASH_DATES = {1, 5} | |
# Дни недели, в которые вы моете пол (от 0 до 6) | |
WASHER_DATES = {3} | |
# Вот тут осторожно, можно все сломать | |
START_YEAR = datetime.date(datetime.date.today().year, 1, 1) | |
# Дата начала отсчета (вроде как дата появления первой воспетки) | |
START = datetime.date(2017, 11, 11) | |
# Дата, до которой нужно вести отсчет | |
EGE = datetime.date(2018, 5, 29) | |
RUN_TIME = None | |
def display_date(date): | |
return '{} {} ({})'.format(date.day, MONTHS[date.month - 1], WEEKDAYS[datetime.datetime.weekday(date)]) | |
def _say_day(n): | |
if n % 10 == 1 and not n % 100 == 11: | |
word = 'день' | |
left = 'остался' | |
elif n % 10 in {2, 3, 4} and not n % 100 in {12, 13, 14}: | |
word = 'дня' | |
left = 'осталось' | |
else: | |
word = 'дней' | |
left = 'осталось' | |
return left, word | |
def _say_time(n): | |
if n % 10 == 1 and not n % 100 == 11: | |
word = 'минуту' | |
elif n % 10 in {2, 3, 4} and not n % 100 in {12, 13, 14}: | |
word = 'минуты' | |
else: | |
word = 'минут' | |
return word | |
def display_ege(date): | |
delta = (EGE - date).days | |
return '_До ЕГЭ {} {} {}_'.format(_say_day(delta)[0], delta, _say_day(delta)[1]) | |
def display_mentor(date): | |
delta = (START - date).days | |
return '*Ночная воспетка:* _{}_'.format(MENTORS[::-1][delta % len(MENTORS)]) | |
def display_trasher(date): | |
pointer = 0 | |
if date.weekday() == 1: | |
pointer = 0 | |
elif date.weekday() == 5: | |
pointer = 1 | |
delta = (date - START_YEAR).days | |
return '*Выносит мусор:* _{}_'.format(BOYS[delta % 2 + pointer]) | |
def display_duty(date): | |
delta = (date - START_YEAR).days | |
return '*Дежурный:* _{}_'.format(BOYS[delta % len(BOYS)]) | |
def display_washer(date): | |
delta = date.day | |
return '*Моет пол:* _{}_'.format(BOYS[delta % len(BOYS)]) | |
@bot.message_handler(commands=['today']) | |
def await(message): | |
if message.chat.id in ACCESS_CHAT_ID: | |
plot = str() | |
today = datetime.date.today() | |
plot += display_date(today) + '\n' | |
plot += display_ege(today) + '\n' | |
plot += display_duty(today) + '\n' | |
plot += display_mentor(today) + '\n' | |
if today.weekday() in TRASH_DATES: | |
plot += display_trasher(today) + '\n' | |
if today.weekday() in WASHER_DATES: | |
plot += display_washer(today) + '\n' | |
bot.send_message(message.chat.id, plot, parse_mode='Markdown') | |
else: | |
bot.send_message(message.chat.id, '*У вас нет прав доступа к боту!*', parse_mode='Markdown') | |
print('New unknown chat was detected: {} {} {}'.format(message.chat.id, | |
message.chat.type, | |
message.chat.username)) | |
@bot.message_handler(commands=['tomorrow']) | |
def await(message): | |
if message.chat.id in ACCESS_CHAT_ID: | |
plot = str() | |
today = datetime.date.today() + datetime.timedelta(days=1) | |
plot += display_date(today) + '\n' | |
plot += display_ege(today) + '\n' | |
plot += display_duty(today) + '\n' | |
plot += display_mentor(today) + '\n' | |
if today.weekday() in TRASH_DATES: | |
plot += display_trasher(today) + '\n' | |
if today.weekday() in WASHER_DATES: | |
plot += display_washer(today) + '\n' | |
bot.send_message(message.chat.id, plot, parse_mode='Markdown') | |
else: | |
bot.send_message(message.chat.id, '*У вас нет прав доступа к боту!*', parse_mode='Markdown') | |
print('New unknown chat was detected: {} {} {}'.format(message.chat.id, | |
message.chat.type, | |
message.chat.username)) | |
@bot.message_handler(commands=['random']) | |
def await(message): | |
if message.chat.id in ACCESS_CHAT_ID: | |
plot = str() | |
plot += '*{}:* _{}_ \n `({})`'.format(RANDOM_SHITS[random.randint(0, len(RANDOM_SHITS) - 1)], | |
BOYS[random.randint(0, len(BOYS) - 1)], | |
'на него можно все свалить') | |
bot.send_message(message.chat.id, plot, parse_mode='Markdown') | |
else: | |
bot.send_message(message.chat.id, '*У вас нет прав доступа к боту!*', parse_mode='Markdown') | |
print('New unknown chat was detected: {} {} {}'.format(message.chat.id, | |
message.chat.type, | |
message.chat.username)) | |
@bot.message_handler(commands=['help']) | |
def await(message): | |
if message.chat.id in ACCESS_CHAT_ID: | |
plot = str() | |
plot += '*Бот для диалога {}* \n'.format(TITLE) | |
delta = int(time.time() - RUN_TIME) // 60 | |
plot += 'Активен уже {} {}'.format(delta, _say_time(delta)) | |
bot.send_message(message.chat.id, plot, parse_mode='Markdown') | |
else: | |
bot.send_message(message.chat.id, '*У вас нет прав доступа к боту!*', parse_mode='Markdown') | |
bot.send_message(message.chat.id, | |
'_По вопросам установки пишите разработчику_ (@avdotion)', | |
parse_mode='Markdown') | |
print('New unknown chat was detected: {} {} {}'.format(message.chat.id, | |
message.chat.type, | |
message.chat.username)) | |
if __name__ == '__main__': | |
print('The Bot has been planted!') | |
RUN_TIME = time.time() | |
bot.polling(none_stop=True) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment