Last active
March 20, 2018 15:50
-
-
Save Forevka/7507fc498546a52d285304cbbd9f9b53 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))) | |
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) == 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); | |
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 | |
@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_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))) | |
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="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]))) | |
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['interval']==new_sch[2] and i['text']==new_sch[1]: | |
print("WORKEEEEEEDDDDDD") | |
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))) | |
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); |
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 sqlite3 | |
import config | |
# Пытаемся узнать из базы «состояние» пользователя | |
def get_current_state(user_id): | |
print(user_id) | |
BASE_DIR = os.path.dirname(os.path.abspath(__file__)) | |
db_path = os.path.join(BASE_DIR, "bot_data.sqlite") | |
con = sqlite3.connect(db_path, check_same_thread=False) | |
cur = con.cursor() | |
cur.execute("select state from users_state where id={}".format(int(user_id))) | |
value=cur.fetchall() | |
#print(list(list(value)[0])[0]) | |
if len(value)<=0: | |
cur.execute("insert into users_state(id,state) values({},{})".format(int(user_id), int(0))) | |
else: | |
return list(list(value)[0])[0] | |
def get_account(user_id): | |
print(user_id) | |
BASE_DIR = os.path.dirname(os.path.abspath(__file__)) | |
db_path = os.path.join(BASE_DIR, "bot_data.sqlite") | |
con = sqlite3.connect(db_path, check_same_thread=False) | |
cur = con.cursor() | |
cur.execute("select account from users_state where id={}".format(int(user_id))) | |
value=cur.fetchall() | |
print(list(list(value)[0])[0]) | |
if len(value)<=0: | |
havent=0 | |
cur.execute("insert into users_state(id, account) values({},{})".format(int(user_id), havent)) | |
else: | |
return list(list(value)[0])[0] | |
def set_account(user_id, value): | |
print(user_id,value) | |
BASE_DIR = os.path.dirname(os.path.abspath(__file__)) | |
db_path = os.path.join(BASE_DIR, "bot_data.sqlite") | |
con = sqlite3.connect(db_path, check_same_thread=False) | |
cur = con.cursor() | |
cur.execute("select account from users_state where id={}".format(int(user_id))) | |
val=cur.fetchall() | |
if len(val)<=0: | |
cur.execute("insert into users_state(id, account) values(?,?)", (user_id, value)) | |
else: | |
cur.execute("update users_state set account = ? where id = ?",(value,user_id)) | |
con.commit() | |
# Сохраняем текущее «состояние» пользователя в нашу базу | |
def set_state(user_id, value): | |
print(user_id,value) | |
BASE_DIR = os.path.dirname(os.path.abspath(__file__)) | |
db_path = os.path.join(BASE_DIR, "bot_data.sqlite") | |
con = sqlite3.connect(db_path, check_same_thread=False) | |
cur = con.cursor() | |
cur.execute("select state from users_state where id={}".format(int(user_id))) | |
val=cur.fetchall() | |
if len(val)<=0: | |
cur.execute("insert into users_state(id,state) values(?,?)", (user_id, value)) | |
else: | |
cur.execute("update users_state set state = ? where id = ?",(value,user_id)) | |
con.commit() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment