You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

347 lines
11 KiB

1 year ago
import telebot
import os
import json
from icecream import ic
1 year ago
########### Функции ##############
from func import *
1 year ago
########### Работа с БД ##########
from db import *
raw_db = read_db()
1 year ago
###### Класс пользователя ########
from user import *
# user.id = 123
# user.pkey = "fd35s"
# user.channel = "anotheruser"
# user.avatar = "♿️"
# user.blocks = [124235]
# user.keys = {"anotheruser": "re543"}
####### Работа с хэшем ###########
from hash import hash
from random import randint
1 year ago
##### Инициализация токена #######
bot = telebot.TeleBot(raw_db['token'])
1 year ago
########## Ловим ошибки ##########
from catch_err import *
1 year ago
############## MAIN ##############
1 year ago
@bot.message_handler(commands=['start', 'help'])
1 year ago
def start(message):
bot.reply_to(message, f"""Приветствую, это бот для анонимного общения.
Главное - выполняет свою функцию без рекламы, без платы и без слежки.
1 year ago
Для начала зарегистрируйся:
/reg ЛюбойНикнейм
11 months ago
Установка адресата - { telebot.formatting.hcode(":НикАдресата") }
1 year ago
Исходный код: https://gitea.404.mn/justuser/just_anonchat
Связь с админом: { telebot.formatting.hcode(":justuser") }
1 year ago
Ещё проекты: @just_openbots""", parse_mode="HTML")
@bot.message_handler(commands=['reg'])
def reg(message):
try:
db = load()
if not ok_args(bot, message, 2, '```\n/reg никнейм```'):
return 0
nick = message.text.split()[1]
# Проверка ника
if not nick_ok(bot, message, nick):
return 0
if nick in db:
bot.reply_to(message, "Данный пользователь уже зарегистрирован.")
elif str(message.chat.id) in db:
bot.reply_to(message, "Вы уже зарегистрированы.")
1 year ago
else:
user = user_(message.chat.id, hash(randint(74287, 5747962)))
db[nick] = user
db[message.chat.id] = nick
save(db)
bot.reply_to(message, "Вы зарегистрировались!\nПриятного использования.")
except:
catch_error(bot, message)
@bot.message_handler(commands=['b'])
def b(message):
try:
if not is_auth(bot, message) or not ok_args(bot, message, 2, '```\n/b :ник``` или ```\n/b ник```'):
return 0
db = load()
nick = db[str(message.chat.id)]
user = db[nick]
block = message.text.split()[1]
# Block by ":user"
if block[0] == ":":
block = block[1:]
if block in db:
if db[block].id not in user.blocks:
user.blocks.append(db[block].id)
save(db)
bot.reply_to(message, f"Пользователь {telebot.formatting.hcode(block)} был заблокирован.",parse_mode="HTML")
else:
bot.reply_to(message, "Данного пользователя не существует.")
except:
catch_error(bot, message)
@bot.message_handler(commands=['u'])
def u(message):
try:
if not is_auth(bot, message) or not ok_args(bot, message, 2, '```\n/u :ник``` или ```\n/u ник```'):
return 0
db = load()
nick = db[str(message.chat.id)]
user = db[nick]
block = message.text.split()[1]
# Unblock by ":user"
if block[0] == ":":
block = block[1:]
if block in db and db[block].id in user.blocks:
user.blocks.remove(db[block].id)
save(db)
bot.reply_to(message, f"Была снята блокировка с пользователя {telebot.formatting.hcode(block)}",parse_mode="HTML")
else:
bot.reply_to(message, "Данного пользователя не существует.")
except:
catch_error(bot, message)
@bot.message_handler(commands=['nick'])
def nick(message):
try:
if not is_auth(bot, message) or not ok_args(bot, message, 2, '```\n/nick ник```'):
return 0
db = load()
new_nick = message.text.split()[1]
# Проверка ника
if not nick_ok(bot, message, new_nick):
return 0
old_nick = db[str(message.chat.id)]
if new_nick not in db:
db[new_nick] = db[old_nick]
db[new_nick].avatar = "♿️"
db[str(message.chat.id)] = new_nick
del db[old_nick]
save(db)
bot.reply_to(message,f"Вы успешно сменили ник с {telebot.formatting.hcode(old_nick)} на {telebot.formatting.hcode(new_nick)}",parse_mode="HTML")
bot.reply_to(message, """Ваша аватарка сброшена до стандартной: ♿️
Также вы можете сбросить публичный ключ: /key_res""")
else:
bot.reply_to(message,"Данный ник уже занят")
except:
catch_error(bot, message)
@bot.message_handler(commands=['av'])
def av(message):
try:
if not is_auth(bot, message) or not ok_args(bot, message, 2, '```\n/av ❄️```'):
return 0
db = load()
if not len(message.text.split()) > 1:
bot.reply_to(message,"Укажите аватарку")
return 0
new_avatar = message.text.split()[1]
if len(new_avatar) > 10:
bot.reply_to(message,"Слишком большое количество символов для аватарки")
else:
nick = db[str(message.chat.id)]
db[nick].avatar = new_avatar
save(db)
bot.reply_to(message,"Новая аватарка успешно установлена")
except:
catch_error(bot, message)
######### Работа с ключом ########
@bot.message_handler(commands=['key'])
def key(message):
try:
if not is_auth(bot, message) or not ok_args(bot, message, 2, '```\n/key ник``` или ```\n/key :ник```'):
return 0
db = load()
nick = message.text.split()[1]
if nick[0] == ':':
nick = nick[1:]
key = db[nick].pkey
bot.reply_to(message,f"Ключ пользователя: {telebot.formatting.hcode(key)}", parse_mode="HTML")
except:
catch_error(bot, message)
@bot.message_handler(commands=['ver'])
def ver(message):
try:
if not is_auth(bot, message) or not ok_args(bot, message, 3, '```\n/ver ник ключ``` или ```\n/ver :ник ключ```'):
return 0
db = load()
nick = message.text.split()[1]
if nick[0] == ':':
nick = nick[1:]
key = message.text.split()[2]
if not nick in db:
bot.reply_to(message,"Не существует такого пользователя")
return 0
if key == db[nick].pkey:
bot.reply_to(message,"✅ Ключи совпадают")
else:
bot.reply_to(message,"❌ Ключи не совпадают")
except:
catch_error(bot, message)
@bot.message_handler(commands=['key_res'])
def key_res(message):
try:
if not is_auth(bot, message) or not ok_args(bot, message, 1, '```\n/key_res```'):
return 0
db = load()
key = hash(randint(74287, 5747962))
nick = db[str(message.chat.id)]
old_key = db[nick].pkey
db[nick].pkey = key
save(db)
bot.reply_to(message,f"""🔑 Ключ успешно сброшен.
Старый ключ: {telebot.formatting.hcode(old_key)}
Новый ключ: {telebot.formatting.hcode(key)}""",parse_mode="HTML")
except:
catch_error(bot, message)
##################################
@bot.message_handler(commands=['me'])
def me(message):
try:
if not is_auth(bot, message) or not ok_args(bot, message, 1, '```\n/me```'):
return 0
db = load()
nick = db[str(message.chat.id)]
user = db[nick]
ch = user.channel
if not user.channel:
ch = "Не задан."
bot.reply_to(message, f"""Заданный канал: {telebot.formatting.hcode(ch)}
Ваш ник: {telebot.formatting.hcode(nick)}
Ваша аватарка: {telebot.formatting.hcode(user.avatar)}
Ваш публичный ключ: {telebot.formatting.hcode(user.pkey)}""",parse_mode="HTML")
except:
catch_error(bot, message)
1 year ago
###### Передача сообщений ########
@bot.message_handler(func=lambda message: True, content_types=['photo','text', 'document', 'voice', 'video'])
1 year ago
def catch_all_messages(message):
try:
db = load()
# Авторизован ли
6 months ago
if not is_auth(bot, message):
return 0
nick = db[str(message.chat.id)]
user = db[nick]
avatar = ' ' + user.avatar
11 months ago
if message.content_type == "text" and message.text[:1].lower() == ":":
channel = message.text[1:]
if channel in db:
# Проверяем ключи
if not key_valid(bot, message, channel):
return 0
user.channel = channel
bot.reply_to(message, "Установлен адресат: " + telebot.formatting.hcode(channel), parse_mode="HTML")
save(db)
else:
bot.reply_to(message, "Не существует данного пользователя.")
elif user.channel != None:
channel = user.channel
db = load()
# Проверяем существование адресата
if channel not in db:
bot.reply_to(message, "Не существует данного пользователя.")
return 0
# Проверяем ключи
if not key_valid(bot, message, channel):
return 0
if message.chat.id not in db[channel].blocks:
try:
11 months ago
# Check if image
if "photo" in message.json:
img_id = message.json['photo'][0]['file_id']
# Catch caption
if "caption" in message.json:
caption = "\n" + message.json['caption']
else:
caption = ""
bot.send_photo(db[channel].id, img_id, f"{telebot.formatting.hcode(':'+nick) + avatar}" + caption, parse_mode="HTML")
11 months ago
elif "document" in message.json:
doc_id = message.json['document']['file_id']
if "caption" in message.json:
caption = "\n" + message.json['caption']
else:
caption = ""
bot.send_document(db[channel].id, doc_id, caption = f"{telebot.formatting.hcode(':'+nick) + avatar}" + caption, parse_mode="HTML")
elif "voice" in message.json:
voice_id = message.json['voice']['file_id']
bot.send_document(db[channel].id, voice_id, caption = f"{telebot.formatting.hcode(':'+nick) + avatar}", parse_mode="HTML")
elif "video" in message.json:
vid_id = message.json['video']['file_id']
if "caption" in message.json:
caption = "\n" + message.json['caption']
else:
caption = ""
bot.send_video(db[channel].id, vid_id, caption = f"{telebot.formatting.hcode(':'+nick) + avatar}", parse_mode="HTML")
11 months ago
else:
try:
bot.send_message(db[channel].id, f"{telebot.formatting.hcode(':'+nick) + avatar}\n" + message.text, parse_mode="HTML")
except:
catch_error(bot, message, 'spec_symb')
11 months ago
except:
catch_error(bot, message)
bot.reply_to(message, "Сообщение не было доставлено.\nВероятно пользователь заблокировал бота.")
else:
bot.reply_to(message, "Увы, но вас заблокировал данный пользователь.")
1 year ago
else:
11 months ago
bot.reply_to(message, f"У вас не указан чат.\nЧтобы подключится к чату напишите: {telebot.formatting.hcode(':Никнейм')} ", parse_mode="HTML")
except:
catch_error(bot, message)
1 year ago
#### POLLING ####
from sys import argv
if len(argv) > 1:
mode = "debug"
else:
mode = "normal"
if mode == "normal":
while True:
try:
bot.polling()
except KeyboardInterrupt:
exit()
except:
pass
elif mode == "debug":
ic("Started debug...")
bot.polling()