Created
April 12, 2018 18:05
-
-
Save Forevka/d3d8d513d954d1410a6571cda08ec352 to your computer and use it in GitHub Desktop.
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
# -*- coding: utf-8 -*- | |
import sys, traceback, time, telebot, dbworker, sqlite3, random | |
import wget,os | |
import time | |
import requests | |
import datetime | |
import lxml.html as lhtml | |
from telebot import types# | |
from telegram.ext import Updater | |
#python -mwebbrowser "http://localhost:8000/cgi-bin/get_id.py?id=3&day=49" | |
token="537230259:AAHcaNjM9aZufBaG3HmrfRU3QHn-unoE2ZQ" | |
bot = telebot.TeleBot(token) | |
u = Updater(token) | |
j = u.job_queue | |
j.start() | |
thread_list=[]; | |
msg_list = []; | |
def send_message_to_group(bot, job): | |
#add_thread | |
#threading.Timer(float(interval), send_message_to_group, [to,text,interval]).start(); | |
print("!!!!TO: "+job.context[0]) | |
print("!!!!TEXT: "+job.context[1].replace("*/n","\n")) | |
to = job.context[0].split(",") | |
for i in to: | |
try: | |
bot.send_message(i.strip(), job.context[1].replace("*/n","\n")) | |
except: | |
pass | |
def add_thread(thr, interv, txt, gr_id): | |
dic = {'thread': thr, 'interval': interv, 'text': txt, 'group_id': gr_id} | |
print(dic) | |
return dic | |
def new_schedule(): | |
sch = open("schedule.txt", 'a', encoding="utf-8") | |
sch.writelines("new rules|simple text|00hour00minute00second|@uahustlers\n") | |
sch.close(); | |
return True; | |
def sch_delete(number): | |
sch = get_schedule(); | |
new_sch = sch[int(number)].split("|") | |
#new_sch[3]=where; | |
new_sch="";#new_sch[0]+"|"+new_sch[1]+"|"+new_sch[2]+"|"+new_sch[3] | |
sch[int(number)]=new_sch | |
file = open("schedule.txt", "w", encoding="utf-8") | |
for i in sch: | |
file.write(i) | |
file.close(); | |
return True; | |
def sch_change_where(number, where): | |
sch = get_schedule(); | |
new_sch = sch[int(number)].split("|") | |
new_sch[3]=where+"\n"; | |
new_sch=new_sch[0]+"|"+new_sch[1]+"|"+new_sch[2]+"|"+new_sch[3] | |
sch[int(number)]=new_sch | |
file = open("schedule.txt", "w", encoding="utf-8") | |
for i in sch: | |
file.write(i) | |
file.close(); | |
return True; | |
def sch_change_interval(number, interval): | |
sch = get_schedule(); | |
new_sch = sch[int(number)].split("|") | |
new_sch[2]=interval; | |
new_sch=new_sch[0]+"|"+new_sch[1]+"|"+new_sch[2]+"|"+new_sch[3] | |
sch[int(number)]=new_sch | |
file = open("schedule.txt", "w", encoding="utf-8") | |
for i in sch: | |
file.write(i) | |
file.close(); | |
return True; | |
def sch_change_text(number, text): | |
sch = get_schedule(); | |
new_sch = sch[int(number)].split("|") | |
new_sch[1]=text.replace("\n","*/n"); | |
new_sch=new_sch[0]+"|"+new_sch[1]+"|"+new_sch[2]+"|"+new_sch[3] | |
sch[int(number)]=new_sch | |
file = open("schedule.txt", "w", encoding="utf-8") | |
for i in sch: | |
file.write(i) | |
file.close(); | |
return True; | |
def sch_change_name(number, name): | |
sch = get_schedule(); | |
new_sch = sch[int(number)].split("|") | |
new_sch[0]=name.replace("\n",""); | |
new_sch=new_sch[0]+"|"+new_sch[1]+"|"+new_sch[2]+"|"+new_sch[3] | |
sch[int(number)]=new_sch | |
file = open("schedule.txt", "w", encoding="utf-8") | |
for i in sch: | |
file.write(i) | |
file.close(); | |
return True; | |
def get_schedule(): | |
sch = open("schedule.txt", 'r', encoding="utf-8") | |
s = sch.readlines(); | |
sch.close(); | |
return s; | |
def add_phrase(ph): | |
phrase=open("phrases.txt", "a", encoding="utf-8"); | |
phrase.writelines("\n"+ph) | |
phrase.close(); | |
def delete_phrase(number): | |
print(number) | |
lines = open("phrases.txt", 'r', encoding="utf-8").readlines() | |
try: | |
del lines[int(number)-1] | |
except BaseException: | |
return False | |
open("phrases.txt", 'w', encoding="utf-8").writelines(lines) | |
return True | |
#delete_phrase(2) | |
def delete_admin(number): | |
print(number) | |
lines = open("admins.txt", 'r', encoding="utf-8").readlines() | |
try: | |
del lines[int(number)-1] | |
except BaseException: | |
return False | |
open("admins.txt", 'w', encoding="utf-8").writelines(lines) | |
return True | |
def add_admins(ph): | |
phrase=open("admins.txt", "a", encoding="utf-8"); | |
phrase.writelines(ph+"\n") | |
phrase.close(); | |
def get_admins(): | |
admin=open("admins.txt", "r", encoding="utf-8"); | |
admins = admin.readlines(); | |
admin.close(); | |
return admins; | |
def get_phrases(): | |
phrase=open("phrases.txt", "r", encoding="utf-8"); | |
phrases = phrase.readlines(); | |
phrase.close(); | |
return phrases; | |
def get_settings(): | |
s = open("settings.txt", "r") | |
settings = s.read(); | |
s.close(); | |
############################## | |
#0 - kick and ban for link | |
#1 - kick and ban for reply | |
#2 - kick and ban for forward | |
#3 - kick and ban for phrases | |
#4 - kick and ban for duplicate message - 5 - hours # additional menu for setting hour interval | |
settings = settings.split("|"); | |
return settings; | |
def set_settings(number,option): | |
s = open("settings.txt", "r") | |
settings = s.read(); | |
print(settings) | |
s.close(); | |
############################## | |
#0 - kick and ban for link | |
#1 - kick and ban for reply | |
#2 - kick and ban for forward | |
#3 - kick and ban for phrases | |
#4 - kick and ban for duplicate message - 5 - hours # additional menu for setting hour interval | |
settings = settings.split("|"); | |
settings[int(number)]=option | |
s = open("settings.txt", "w"); | |
for i in range(0,len(settings),1): | |
if i<len(settings)-1: | |
s.write(settings[i]+"|") | |
else: | |
s.write(settings[i]) | |
s.close(); | |
return True; | |
#set_settings(1, "t") | |
password = "Portal1!"; | |
red_cross = "✖️" | |
cross = "❌" | |
check = "☑️" | |
def send_settings(message): | |
settings = get_settings(); | |
keyboard_ = types.InlineKeyboardMarkup() | |
if settings[0]=="f": | |
keyboard_.row(types.InlineKeyboardButton(text="Бан за ссылку "+cross,callback_data="ban_for_link" + "*" + str(message.message_id))) | |
else: | |
keyboard_.row(types.InlineKeyboardButton(text="Бан за ссылку "+check,callback_data="ban_for_link" + "*" + str(message.message_id))) | |
if settings[1]=="f": | |
keyboard_.row(types.InlineKeyboardButton(text="Бан за ответ "+cross,callback_data="ban_for_reply" + "*" + str(message.message_id))) | |
else: | |
keyboard_.row(types.InlineKeyboardButton(text="Бан за ответ "+check,callback_data="ban_for_reply" + "*" + str(message.message_id))) | |
if settings[2]=="f": | |
keyboard_.row(types.InlineKeyboardButton(text="Бан за форвард смс "+cross,callback_data="ban_for_forward" + "*" + str(message.message_id))) | |
else: | |
keyboard_.row(types.InlineKeyboardButton(text="Бан за форвард смс "+check,callback_data="ban_for_forward" + "*" + str(message.message_id))) | |
if settings[3]=="f": | |
keyboard_.row(types.InlineKeyboardButton(text="Бан за фразы "+cross,callback_data="ban_for_phrases" + "*" + str(message.message_id)),types.InlineKeyboardButton(text="Задать фразы",callback_data="set_phrases" + "*" + str(message.message_id))) | |
else: | |
keyboard_.row(types.InlineKeyboardButton(text="Бан за фразы "+check,callback_data="ban_for_phrases" + "*" + str(message.message_id)),types.InlineKeyboardButton(text="Задать фразы",callback_data="set_phrases" + "*" + str(message.message_id))) | |
if settings[4]=="f": | |
keyboard_.row(types.InlineKeyboardButton(text="Бан за дубликат смс "+cross, callback_data="ban_for_duplicate" + "*" + str(message.message_id))) | |
else: | |
keyboard_.row(types.InlineKeyboardButton(text="Бан за дубликат смс "+check, callback_data="ban_for_duplicate" + "*" + str(message.message_id))) | |
keyboard_.row(types.InlineKeyboardButton(text="Отложенный постинг", callback_data="schedule_settings" + "*" + str(message.message_id))) | |
keyboard_.row(types.InlineKeyboardButton(text="Игнорирование правил", callback_data="admin_list" + "*" + str(message.message_id))) | |
#keyboard_.row(types.InlineKeyboardButton(text="Забанить пользователя везде", callback_data="ban_everywhere" + "*" + str(message.message_id))) | |
bot.send_message(message.chat.id, "Настройки этого бота", reply_markup=keyboard_) | |
@bot.message_handler(func=lambda message: dbworker.get_current_state(message.chat.id) == 7) | |
def sch_where(message): | |
dbworker.set_state(message.chat.id, 0) | |
account = dbworker.get_account(message.chat.id) | |
keyboard_ = types.InlineKeyboardMarkup() | |
keyboard_.row(types.InlineKeyboardButton(text="Назад", callback_data="schedule_settings" + "*" + str(message.message_id))) | |
sch_change_where(account, message.text) | |
bot.send_message(message.chat.id, "Куда будем постить изменено!", reply_markup=keyboard_) | |
@bot.message_handler(func=lambda message: dbworker.get_current_state(message.chat.id) == 6) | |
def sch_interval(message): | |
dbworker.set_state(message.chat.id, 0) | |
account = dbworker.get_account(message.chat.id) | |
keyboard_ = types.InlineKeyboardMarkup() | |
keyboard_.row(types.InlineKeyboardButton(text="Назад", callback_data="schedule_settings" + "*" + str(message.message_id))) | |
sch_change_interval(account, message.text) | |
bot.send_message(message.chat.id, "Интервал изменен!", reply_markup=keyboard_ ) | |
@bot.message_handler(func=lambda message: dbworker.get_current_state(message.chat.id) == 5) | |
def sch_text(message): | |
dbworker.set_state(message.chat.id, 0) | |
account = dbworker.get_account(message.chat.id) | |
keyboard_ = types.InlineKeyboardMarkup() | |
keyboard_.row(types.InlineKeyboardButton(text="Назад", callback_data="schedule_settings" + "*" + str(message.message_id))) | |
sch_change_text(account, message.text) | |
bot.send_message(message.chat.id, "Текст изменен!", reply_markup=keyboard_ ) | |
@bot.message_handler(func=lambda message: dbworker.get_current_state(message.chat.id) == 4) | |
def sch_name(message): | |
dbworker.set_state(message.chat.id, 0) | |
account = dbworker.get_account(message.chat.id) | |
keyboard_ = types.InlineKeyboardMarkup() | |
keyboard_.row(types.InlineKeyboardButton(text="Назад", callback_data="schedule_settings" + "*" + str(message.message_id))) | |
sch_change_name(account, message.text) | |
bot.send_message(message.chat.id, "Имя изменено!", reply_markup=keyboard_) | |
@bot.message_handler(func=lambda message: dbworker.get_current_state(message.chat.id) == 8) | |
def admin_adds(message): | |
dbworker.set_state(message.chat.id, 0) | |
if message.text.replace("\n","*/n")!=" ": | |
add_admins(message.text.replace("\n","*/n")) | |
keyboard_ = types.InlineKeyboardMarkup() | |
keyboard_.row(types.InlineKeyboardButton(text="Назад", callback_data="admin_list" + "*" + str(message.message_id))) | |
bot.send_message(message.chat.id, "Добавлено!", reply_markup=keyboard_) | |
else: | |
keyboard_ = types.InlineKeyboardMarkup() | |
keyboard_.row(types.InlineKeyboardButton(text="Назад", callback_data="admin_list" + "*" + str(message.message_id))) | |
bot.send_message(message.chat.id, "Нельзя отправлять пустую строку", reply_markup=keyboard_) | |
@bot.message_handler(func=lambda message: dbworker.get_current_state(message.chat.id) == 3) | |
def ph_add(message): | |
dbworker.set_state(message.chat.id, 0) | |
if message.text.replace("\n","*/n")!=" ": | |
add_phrase(message.text.replace("\n","*/n")) | |
keyboard_ = types.InlineKeyboardMarkup() | |
keyboard_.row(types.InlineKeyboardButton(text="Назад", callback_data="set_phrases" + "*" + str(message.message_id))) | |
bot.send_message(message.chat.id, "Добавлено!", reply_markup=keyboard_) | |
else: | |
keyboard_ = types.InlineKeyboardMarkup() | |
keyboard_.row(types.InlineKeyboardButton(text="Назад", callback_data="set_phrases" + "*" + str(message.message_id))) | |
bot.send_message(message.chat.id, "Фраза не может быть пустой", reply_markup=keyboard_) | |
#send_settings(message); | |
@bot.message_handler(func=lambda message: dbworker.get_current_state(message.chat.id) == 9) | |
def admin_dels(message): | |
dbworker.set_state(message.chat.id, 0) | |
ss = delete_admin(message.text); | |
keyboard_ = types.InlineKeyboardMarkup() | |
keyboard_.row(types.InlineKeyboardButton(text="Назад", callback_data="admin_list" + "*" + str(message.message_id))) | |
if ss==False: | |
bot.send_message(message.chat.id, "Чето пошло нетак, нужно отправлять только число", reply_markup=keyboard_) | |
else: | |
bot.send_message(message.chat.id, "Удалено!", reply_markup=keyboard_) | |
@bot.message_handler(func=lambda message: dbworker.get_current_state(message.chat.id) == 20) | |
def ban_everywhere(message): | |
dbworker.set_state(message.chat.id, 0) | |
keyboard_ = types.InlineKeyboardMarkup() | |
keyboard_.row(types.InlineKeyboardButton(text="Назад", callback_data="admin_list" + "*" + str(message.message_id))) | |
for i in group_list: | |
try: | |
bot.restrict_chat_member(i, message.text);#until_date=message.date+7*24*60*60 | |
bot.kick_chat_member(i, message.text); | |
except Exception as e: | |
print(e) | |
@bot.message_handler(func=lambda message: dbworker.get_current_state(message.chat.id) == 2) | |
def ph_del(message): | |
dbworker.set_state(message.chat.id, 0) | |
ss = delete_phrase(message.text); | |
keyboard_ = types.InlineKeyboardMarkup() | |
keyboard_.row(types.InlineKeyboardButton(text="Назад", callback_data="set_phrases" + "*" + str(message.message_id))) | |
if ss==False: | |
bot.send_message(message.chat.id, "Чето пошло нетак, нужно отправлять только число", reply_markup=keyboard_) | |
else: | |
bot.send_message(message.chat.id, "Удалено!", reply_markup=keyboard_) | |
#send_settings(message); | |
@bot.message_handler(func=lambda message: True) | |
def check_message_text(message): | |
print(message) | |
settings = get_settings(); | |
admins = get_admins(); | |
print(admins) | |
if message.text.find("/settings")>=0: | |
if message.text[len("/settings")+1:]==password: | |
send_settings(message) | |
else: | |
username = message.from_user.username; | |
if username!=None: | |
username = message.from_user.username + "\n" | |
else: | |
username = "NOONE_NOONE" | |
print(username) | |
user = message.from_user.id; | |
msg = message.text.lower(); | |
if username in admins: | |
pass | |
else: | |
if msg[0]=="/": | |
try: | |
bot.delete_message(message.chat.id, message.message_id) | |
except: | |
pass | |
return 0; | |
print(msg) | |
if settings[0]=="t": | |
if msg.find("t.me/joinchat")>=0: | |
try: | |
bot.restrict_chat_member(message.chat.id, user); | |
except: | |
pass | |
try: | |
bot.kick_chat_member(message.chat.id, user); | |
except: | |
pass | |
try: | |
bot.delete_message(message.chat.id, message.message_id) | |
except: | |
pass | |
return 0; | |
if settings[1]=="t": | |
if message.reply_to_message!=None: | |
try: | |
bot.restrict_chat_member(message.chat.id, user); | |
except: | |
pass | |
try: | |
bot.kick_chat_member(message.chat.id, user); | |
except: | |
pass | |
try: | |
bot.delete_message(message.chat.id, message.message_id) | |
except: | |
pass | |
return 0; | |
if settings[2]=="t": | |
if message.forward_from!=None: | |
print(message) | |
print("forward") | |
try: | |
bot.restrict_chat_member(message.chat.id, user); | |
except: | |
pass | |
try: | |
bot.kick_chat_member(message.chat.id, user); | |
except: | |
pass | |
try: | |
bot.delete_message(message.chat.id, message.message_id) | |
except: | |
pass | |
return 0; | |
if settings[3]=="t": | |
phrases = get_phrases(); | |
for i in phrases: | |
if msg.find(i.replace("*/n","\n").lower().strip())>=0: | |
print(i) | |
print("PHRASE") | |
try: | |
bot.restrict_chat_member(message.chat.id, user); | |
except: | |
pass | |
try: | |
bot.kick_chat_member(message.chat.id, user); | |
except: | |
pass | |
try: | |
bot.delete_message(message.chat.id, message.message_id) | |
except: | |
pass | |
return 0; | |
if settings[4]=="t": | |
#print("ban for dupl") | |
for i in range(0, len(msg_list), 1): | |
#print(i) | |
d = msg_list[i]; | |
print(d) | |
if int(d['from'])==int(user): | |
from_time_old = datetime.datetime.fromtimestamp(int(d['time'])).strftime('%Y-%m-%d %H:%M:%S') | |
new_time = datetime.datetime.fromtimestamp(message.date).strftime('%Y-%m-%d %H:%M:%S') | |
print(from_time_old) | |
print(new_time) | |
print(datetime.datetime.fromtimestamp(int(d['time'])+5).strftime('%Y-%m-%d %H:%M:%S')) | |
if int(d['time'])+16 *60*60>=message.date: | |
#print("lesser") | |
if msg==d['text'].lower(): | |
try: | |
#msg_list.remove(d) | |
try: | |
bot.restrict_chat_member(message.chat.id, user, until_date=message.date+7*24*60*60); | |
#bot.kick_chat_member(message.chat.id, user); | |
except: | |
pass | |
try: | |
pass | |
#bot.kick_chat_member(message.chat.id, user); | |
except: | |
pass | |
try: | |
bot.delete_message(message.chat.id, message.message_id) | |
except: | |
pass | |
return 0; | |
except: | |
pass | |
#delta_time = new_time - from_time_old#int(new_time) - int(d['time']); | |
#from_time_old = datetime.datetime.fromtimestamp(delta_time).strftime('%Y-%m-%d %H:%M:%S') | |
#pass | |
#pass | |
d = {"from":message.from_user.id, "text":msg, "id":message.message_id, "time": message.date} | |
msg_list.append(d) | |
#print(d) | |
#pass | |
@bot.message_handler(func=lambda message: True, content_types=["document","sticker","video","audio","voice"]) | |
def check_message_photo(message): | |
print(message) | |
#msg = message.caption.lower(); | |
user = message.from_user.id; | |
#if message.caption!=None: | |
"""if message.caption.find("t.me/joinchat")>=0: | |
try: | |
bot.delete_message(message.chat.id, message.message_id) | |
except: | |
pass | |
return 0;""" | |
try: | |
bot.delete_message(message.chat.id, message.message_id) | |
except: | |
pass | |
return 0 | |
@bot.message_handler(func=lambda message: True, content_types=["photo"]) | |
def check_message_photo(message): | |
print(message) | |
#msg = message.caption.lower(); | |
user = message.from_user.id; | |
#if message.caption!=None: | |
if message.forward_from!=None: | |
try: | |
bot.delete_message(message.chat.id, message.message_id) | |
except: | |
pass | |
return 0 | |
################################ | |
group_list = ["@uahustlers", "@uacrypto","@uajobs","@darknet_look","@uamining","@uabar","@uacars","@hustlers_court","@kidok_list"] | |
################################ | |
@bot.callback_query_handler(func=lambda call: True) | |
def callback_inline(call): | |
# Если сообщение из чата с ботом | |
#bot.delete_message(call.message.chat.id,message_id=call.message.message_id-2) | |
if call.message: | |
print(call.data) | |
if call.data.find("ban_for_link")>=0: | |
#msg=call.data.split("*") | |
#print("ban for link") | |
settings = get_settings(); | |
setting = settings[0] | |
if setting == "f": | |
set_settings(0,"t") | |
else: | |
set_settings(0,"f") | |
bot.delete_message(call.message.chat.id, call.message.message_id) | |
send_settings(call.message) | |
elif call.data.find("ban_everywhere")>=0: | |
#msg=call.data.split("*") | |
#print("ban for link") | |
msg=call.data.split("*") | |
dbworker.set_state(call.message.chat.id, 20) | |
bot.edit_message_text(message_id=int(msg[1])+1,chat_id=call.message.chat.id, text="Ник пользователя которого нужно забанить") | |
#bot.delete_message(call.message.chat.id, call.message.message_id) | |
#send_settings(call.message) | |
elif call.data.find("settings_list")>=0: | |
#msg=call.data.split("*") | |
#print("ban for link") | |
bot.delete_message(call.message.chat.id, call.message.message_id) | |
send_settings(call.message) | |
elif call.data.find("ban_for_reply")>=0: | |
#msg=call.data.split("*") | |
#print("ban for link") | |
settings = get_settings(); | |
setting = settings[1] | |
if setting == "f": | |
set_settings(1,"t") | |
else: | |
set_settings(1,"f") | |
bot.delete_message(call.message.chat.id, call.message.message_id) | |
send_settings(call.message) | |
elif call.data.find("ban_for_forward")>=0: | |
#msg=call.data.split("*") | |
#print("ban for link") | |
settings = get_settings(); | |
setting = settings[2] | |
if setting == "f": | |
set_settings(2,"t") | |
else: | |
set_settings(2,"f") | |
bot.delete_message(call.message.chat.id, call.message.message_id) | |
send_settings(call.message) | |
elif call.data.find("ban_for_phrases")>=0: | |
#msg=call.data.split("*") | |
#print("ban for link") | |
settings = get_settings(); | |
setting = settings[3] | |
if setting == "f": | |
set_settings(3,"t") | |
else: | |
set_settings(3,"f") | |
bot.delete_message(call.message.chat.id, call.message.message_id) | |
send_settings(call.message) | |
elif call.data.find("ban_for_duplicate")>=0: | |
#msg=call.data.split("*") | |
#print("ban for link") | |
settings = get_settings(); | |
setting = settings[4] | |
if setting == "f": | |
set_settings(4,"t") | |
else: | |
set_settings(4,"f") | |
bot.delete_message(call.message.chat.id, call.message.message_id) | |
send_settings(call.message) | |
elif call.data.find("set_phrases")>=0: | |
msg=call.data.split("*") | |
#print("ban for link") | |
phrases = get_phrases(); | |
reply=""; | |
for i in range(0,len(phrases),1): | |
reply+=str(i+1) + ". " + phrases[i].replace("*/n","\n") | |
keyboard_ = types.InlineKeyboardMarkup() | |
keyboard_.row(types.InlineKeyboardButton(text="Добавить фразу",callback_data="add_phrase" + "*" + str(call.message.message_id))) | |
keyboard_.row(types.InlineKeyboardButton(text="Удалить фразу",callback_data="del_phrase" + "*" + str(call.message.message_id))) | |
keyboard_.row(types.InlineKeyboardButton(text="Назад",callback_data="settings_list" + "*" + str(call.message.message_id))) | |
bot.edit_message_text(message_id=int(msg[1])+1,chat_id=call.message.chat.id, text="Фразы за которые следует бан:\n"+reply, reply_markup=keyboard_) | |
#bot.edit_message_text(message_id=int(msg[1])+1, chat_id=call.message.chat.id, text="По поводу вывода писать сюда - @test") | |
elif call.data.find("del_phrase")>=0: | |
msg=call.data.split("*") | |
dbworker.set_state(call.message.chat.id, 2) | |
bot.edit_message_text(message_id=int(msg[1]),chat_id=call.message.chat.id, text="Отправь номер строки с фразой которую нужно удалить") | |
elif call.data.find("add_phrase")>=0: | |
msg=call.data.split("*") | |
dbworker.set_state(call.message.chat.id, 3) | |
bot.edit_message_text(message_id=int(msg[1]),chat_id=call.message.chat.id, text="Отправь новую фразу которую нужно добавить") | |
elif call.data.find("schedule_settings")>=0: | |
msg=call.data.split("*") | |
#dbworker.set_state(call.message.chat.id, 4) | |
keyboard_ = types.InlineKeyboardMarkup() | |
sch_list = get_schedule(); | |
print(sch_list); | |
try: | |
i=0; | |
for i in range(0, len(sch_list), 1): | |
st = sch_list[i].split("|"); | |
keyboard_.row(types.InlineKeyboardButton(text=st[0],callback_data="schedule_manage" + "*" + str(call.message.message_id)+"*"+str(i))) | |
except: | |
pass | |
keyboard_.row(types.InlineKeyboardButton(text="<< Назад",callback_data="settings_list" + "*" + str(call.message.message_id))) | |
keyboard_.row(types.InlineKeyboardButton(text="Добавить отложенный пост",callback_data="schedule_add" + "*" + str(call.message.message_id)+"*"+str(i))) | |
bot.edit_message_text(message_id=int(msg[1])+1,chat_id=call.message.chat.id, text="Настройки отложенного постинга", reply_markup=keyboard_) | |
elif call.data.find("schedule_manage")>=0: | |
msg=call.data.split("*") | |
#dbworker.set_state(call.message.chat.id, 4) | |
print(msg[2]) | |
keyboard_ = types.InlineKeyboardMarkup() | |
keyboard_.row(types.InlineKeyboardButton(text="Изменить название",callback_data="schedule_change_name" + "*" + str(call.message.message_id)+"*"+str(msg[2]))) | |
keyboard_.row(types.InlineKeyboardButton(text="Изменить текст смс",callback_data="schedule_change_text" + "*" + str(call.message.message_id)+"*"+str(msg[2]))) | |
keyboard_.row(types.InlineKeyboardButton(text="Изменить интервал",callback_data="schedule_change_interval" + "*" + str(call.message.message_id)+"*"+str(msg[2]))) | |
keyboard_.row(types.InlineKeyboardButton(text="Изменить канал куда будет идти пост",callback_data="schedule_change_where" + "*" + str(call.message.message_id)+"*"+str(msg[2]))) | |
keyboard_.row(types.InlineKeyboardButton(text="Удалить "+red_cross,callback_data="delete_schedule" + "*" + str(call.message.message_id)+"*"+str(msg[2]))) | |
keyboard_.row(types.InlineKeyboardButton(text="Запустить рассылку ",callback_data="start_schedule" + "*" + str(call.message.message_id)+"*"+str(msg[2])),types.InlineKeyboardButton(text="Остановить рассылку",callback_data="terminate_schedule" + "*" + str(call.message.message_id)+"*"+str(msg[2]))) | |
keyboard_.row(types.InlineKeyboardButton(text="<< Назад",callback_data="schedule_settings" + "*" + str(call.message.message_id-1))) | |
sch_list = get_schedule(); | |
print(sch_list) | |
k = sch_list[int(msg[2])] | |
k = k.split("|") | |
bot.edit_message_text(message_id=int(msg[1]),chat_id=call.message.chat.id, text="Настройки поста\nИмя: "+k[0]+"\nТекст: "+k[1].replace("*/n","\n")+"\nИнтервал: "+k[2]+"\nКуда: "+k[3], reply_markup=keyboard_) | |
elif call.data.find("schedule_change_name")>=0: | |
msg=call.data.split("*") | |
dbworker.set_account(call.message.chat.id,int(msg[2])) | |
dbworker.set_state(call.message.chat.id, 4) | |
bot.edit_message_text(message_id=int(msg[1]),chat_id=call.message.chat.id, text="Введи новое имя для поста") | |
elif call.data.find("schedule_change_text")>=0: | |
msg=call.data.split("*") | |
dbworker.set_account(call.message.chat.id,int(msg[2])) | |
dbworker.set_state(call.message.chat.id, 5) | |
bot.edit_message_text(message_id=int(msg[1]),chat_id=call.message.chat.id, text="Введи новый текст для отправки") | |
elif call.data.find("schedule_change_interval")>=0: | |
msg=call.data.split("*") | |
dbworker.set_account(call.message.chat.id,int(msg[2])) | |
dbworker.set_state(call.message.chat.id, 6) | |
bot.edit_message_text(message_id=int(msg[1]),chat_id=call.message.chat.id, text="Введи интервал в таком формате - 00hour00minute00second\nНапример 05hour01minute12second\n!!!ОТПРАВЛЯТЬ СТРОГО ПО ПРИМЕРУ!!!") | |
elif call.data.find("schedule_change_where")>=0: | |
msg=call.data.split("*") | |
dbworker.set_account(call.message.chat.id,int(msg[2])) | |
dbworker.set_state(call.message.chat.id, 7) | |
bot.edit_message_text(message_id=int(msg[1]),chat_id=call.message.chat.id, text="Введи чаты куда будет отправляться пост пример @channel - только в таком виде.\nЕсли чатов больше чем один то отправляй через запятую например @channel1, @channel2") | |
elif call.data.find("schedule_add")>=0: | |
msg=call.data.split("*") | |
#dbworker.set_account(call.message.chat.id,int(msg[2])) | |
#dbworker.set_state(call.message.chat.id, 7) | |
new_schedule() | |
keyboard_ = types.InlineKeyboardMarkup() | |
keyboard_.row(types.InlineKeyboardButton(text="<< Назад", callback_data="schedule_settings" + "*" + str(call.message.message_id-1))) | |
bot.edit_message_text(message_id=int(msg[1]),chat_id=call.message.chat.id, text="Новое правило создано, отредактируй его в настройках.", reply_markup=keyboard_) | |
elif call.data.find("delete_schedule")>=0: | |
msg=call.data.split("*") | |
#dbworker.set_account(call.message.chat.id,int(msg[2])) | |
#dbworker.set_state(call.message.chat.id, 7) | |
sch_delete(int(msg[2])) | |
keyboard_ = types.InlineKeyboardMarkup() | |
keyboard_.row(types.InlineKeyboardButton(text="<< Назад", callback_data="schedule_settings" + "*" + str(call.message.message_id-1))) | |
bot.edit_message_text(message_id=int(msg[1]),chat_id=call.message.chat.id, text="Окей, это правило было удалено.", reply_markup=keyboard_) | |
elif call.data.find("start_schedule")>=0: | |
msg=call.data.split("*") | |
sch = get_schedule(); | |
new_sch = sch[int(msg[2])].split("|") | |
interval=new_sch[2] | |
hour_pos=interval.find("hour") | |
minute_pos=interval.find("minute") | |
second_pos=interval.find("second") | |
hour=interval[:hour_pos] | |
minute=interval[hour_pos+4:minute_pos] | |
second=interval[minute_pos+6:second_pos] | |
print("hour "+hour) | |
print("minute "+minute) | |
print("second "+second) | |
time_to_send=(int(hour)*60*60)+(int(minute)*60)+int(second) | |
print("time to send "+str(time_to_send)); | |
job_minute = j.run_repeating(callback=send_message_to_group, interval=time_to_send, context=(new_sch[3], new_sch[1])) | |
thread_list.append(add_thread(job_minute, new_sch[2], new_sch[1], msg[2])) | |
print(thread_list) | |
for i in thread_list: | |
print(i['thread']) | |
print(i['interval']) | |
print(i['text']) | |
#dbworker.set_account(call.message.chat.id,int(msg[2])) | |
#dbworker.set_state(call.message.chat.id, 7) | |
to = new_sch[3].split(","); | |
for i in to: | |
try: | |
print(i.strip(), new_sch[1]) | |
bot.send_message(i.strip(),new_sch[1].replace("*/n","\n")) | |
except Exception as e: | |
print(e) | |
keyboard_ = types.InlineKeyboardMarkup() | |
keyboard_.row(types.InlineKeyboardButton(text="<< Назад", callback_data="schedule_settings" + "*" + str(call.message.message_id-1))) | |
bot.edit_message_text(message_id=int(msg[1]),chat_id=call.message.chat.id, text="Рассылка была запущена!",reply_markup=keyboard_) | |
elif call.data.find("terminate_schedule")>=0: | |
msg=call.data.split("*") | |
sch = get_schedule(); | |
new_sch = sch[int(msg[2])].split("|") | |
interval=new_sch[2] | |
hour_pos=interval.find("hour") | |
minute_pos=interval.find("minute") | |
second_pos=interval.find("second") | |
hour=interval[:hour_pos] | |
minute=interval[hour_pos+4:minute_pos] | |
second=interval[minute_pos+6:second_pos] | |
#print("hour "+hour) | |
#print("minute "+minute) | |
#print("second "+second) | |
time_to_send=(int(hour)*60*60)+(int(minute)*60)+int(second) | |
#print("time to send "+str(time_to_send)); | |
for i in thread_list: | |
#print(i['interval'], i['text']) | |
#print(group[2], group[1]) | |
if i['group_id']==msg[2]:# and i['text']==new_sch[1]: | |
#print("WORKEEEEEEDDDDDD") | |
print("TERMINATE") | |
print(i['group_id']) | |
print(i['thread']) | |
i['thread'].schedule_removal(); | |
#dbworker.set_account(call.message.chat.id,int(msg[2])) | |
#dbworker.set_state(call.message.chat.id, 7) | |
keyboard_ = types.InlineKeyboardMarkup() | |
keyboard_.row(types.InlineKeyboardButton(text="<< Назад", callback_data="schedule_settings" + "*" + str(call.message.message_id-1))) | |
bot.edit_message_text(message_id=int(msg[1]),chat_id=call.message.chat.id, text="Рассылка остановлена.", reply_markup=keyboard_) | |
elif call.data.find("admin_list")>=0: | |
msg=call.data.split("*") | |
#dbworker.set_account(call.message.chat.id,int(msg[2])) | |
#dbworker.set_state(call.message.chat.id, 4) | |
admins=get_admins(); | |
reply=""; | |
for i in range(0,len(admins),1): | |
reply+=str(i+1) + ". " + admins[i].replace("*/n","\n") | |
if reply=="": | |
reply="\nНету админов :(" | |
keyboard_ = types.InlineKeyboardMarkup() | |
keyboard_.row(types.InlineKeyboardButton(text="Добавить админа", callback_data="admin_add" + "*" + str(call.message.message_id))) | |
keyboard_.row(types.InlineKeyboardButton(text="Удалить админа", callback_data="admin_delete" + "*" + str(call.message.message_id))) | |
keyboard_.row(types.InlineKeyboardButton(text="<< Назад",callback_data="settings_list" + "*" + str(call.message.message_id))) | |
bot.edit_message_text(message_id=int(msg[1])+1,chat_id=call.message.chat.id, text="Список админов\n"+reply, reply_markup=keyboard_) | |
elif call.data.find("admin_add")>=0: | |
msg=call.data.split("*") | |
#dbworker.set_account(call.message.chat.id,int(msg[2])) | |
dbworker.set_state(call.message.chat.id, 8) | |
bot.edit_message_text(message_id=int(msg[1]),chat_id=call.message.chat.id, text="Отправь юзернейм админа без знака @\nНапример berthollet") | |
elif call.data.find("admin_delete")>=0: | |
msg=call.data.split("*") | |
#dbworker.set_account(call.message.chat.id,int(msg[2])) | |
dbworker.set_state(call.message.chat.id, 9) | |
bot.edit_message_text(message_id=int(msg[1]),chat_id=call.message.chat.id, text="Отправь строку в которой записан юзернейм админа которого нужно убрать") | |
def telegram_main(n): | |
try: | |
bot.polling(none_stop=True,timeout=180) | |
except: | |
traceback_error_string=traceback.format_exc() | |
with open("Error.Log", "a") as myfile: | |
myfile.write("\r\n\r\n" + time.strftime("%c")+"\r\n<<error polling="">>\r\n"+ traceback_error_string + "\r\n<<error polling="">>") | |
bot.stop_polling() | |
time.sleep(10) | |
if __name__ == '__main__': | |
telegram_main(1); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment