Skip to content

Instantly share code, notes, and snippets.

@avdotion
Last active December 3, 2017 11:10
Show Gist options
  • Save avdotion/1c830897f9c03e3ac4ecba9526808cc7 to your computer and use it in GitHub Desktop.
Save avdotion/1c830897f9c03e3ac4ecba9526808cc7 to your computer and use it in GitHub Desktop.
Общажный бот (Telegram Bot)
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