• Страница 1 из 1
  • 1
Форум » ψ Общий раздел » Программирование » Python » Бот постинг в канал Telegram (Бот для пересыла постов с бота в канал для облегчения жизни)
Бот постинг в канал Telegram

Дата: Сб, 16.12.2023, 09:54 | Сообщение 1
Регистр
04.01.2021
Сообщений
455

Репутация
Понадобился бот для пересыла постов с бота в канал для облегчения жизни + подпись с ссылкой на канал
Кароче проект был такой сложный.

Код Python:

Код
import telebot
from telebot import types
from config import token
from config import CHANNEL_USERNAME
from config import GROUP_LINK
from config import root
import time
import json
import os

bot = telebot.TeleBot(token)

admins_file = 'adm.json'

def keyadm():
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=2)
    a = types.KeyboardButton('Список администрации')
    markup.add(a)
    return markup

def rootadm():
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=2)
    a = types.KeyboardButton('Список администрации')
    b = types.KeyboardButton('/adadm')
    c = types.KeyboardButton('/dadm')
    markup.add(a, b,c)
    return markup
def load_admins():
    if os.path.exists(admins_file):
        with open(admins_file, 'r') as file:
            return json.load(file)
    else:
        return []
def save_admins(admins_list):
    with open(admins_file, 'w') as file:
        json.dump(admins_list, file)

@bot.message_handler(commands=['adm'])
def adm(message):
    user_id = message.from_user.username
    user = message.from_user.first_name
    if user_id in load_admins():
        bot.send_message(message.chat.id, f'{user}, вы вошли в админ панель', reply_markup=keyadm())

@bot.message_handler(commands=['radm'])
def rot_adm(message):
    user_id = message.from_user.username
    user = message.from_user.first_name
    if user_id in root:
        bot.send_message(message.chat.id, f'{user}, вы вошли в root панель', reply_markup=rootadm())

@bot.message_handler(commands=['adadm'])
def add_admin(message):
    user_id = message.from_user.username
    if user_id in root:
        bot.send_message(message.chat.id, 'Введите @username нового администратора⬇')
        bot.register_next_step_handler(message, process_add_admin)

@bot.message_handler(commands=['dadm'])
def del_admin(message):
    user_id = message.from_user.username
    if user_id in root:
        bot.send_message(message.chat.id, 'Введите @username администратора, которого вы хотите удалить⬇')
        bot.register_next_step_handler(message, process_del_admin)

def process_add_admin(message):
    new_admin_username = message.text[1:]
    admins_list = load_admins()

    if new_admin_username not in admins_list:
        admins_list.append(new_admin_username)
        save_admins(admins_list)
        bot.send_message(message.chat.id, f'Пользователь @{new_admin_username} добавлен в список администраторов!',reply_markup=rootadm())
    else:
        bot.send_message(message.chat.id, 'Этот пользователь уже является администратором.',reply_markup=rootadm())

def process_del_admin(message):
    target_admin_username = message.text[1:]
    admins_list = load_admins()

    if target_admin_username in admins_list:
        admins_list.remove(target_admin_username)
        save_admins(admins_list)
        bot.send_message(message.chat.id, f'Пользователь @{target_admin_username} удален из списка администраторов!',reply_markup=rootadm())
    else:
        bot.send_message(message.chat.id, 'Этот пользователь не является администратором.',reply_markup=rootadm())

@bot.message_handler(func=lambda message: message.text == 'Список администрации')
def spisok(message):
    user_id = message.from_user.username
    if user_id in root:
        admins_list = load_admins()
        bot.send_message(message.chat.id, f'Список администрации:\n{admins_list}', reply_markup=rootadm())
    elif user_id in load_admins():
        admins_list = load_admins()
        bot.send_message(message.chat.id, f'Список администрации:\n{admins_list}', reply_markup=keyadm())

@bot.message_handler(commands=['start'])
def start(message):
    user_id = message.from_user.username
    if user_id in load_admins():
        user = message.from_user.first_name
        bot.send_message(message.chat.id, f'Привет {user}\nОтправь мне пост и я его запощу вместо тебя')

@bot.message_handler(func=lambda message: True, content_types=['text', 'photo', 'video', 'document', 'animation'])
def forward_to_channel(message):
    user_id = message.from_user.username
    user = message.from_user.first_name
    if user_id in load_admins():
        try:
            if message.text:
                message_text = f"{message.text}\n\n\n\n<a href='{GROUP_LINK}'>Felaz Fortik</a>"
                bot.send_message(CHANNEL_USERNAME, message_text, parse_mode='HTML')

            elif message.photo:
                photo_id = message.photo[-1].file_id
                caption = message.caption
                if caption is not None:
                    caption = f"{caption}\n\n\n\n<a href='{GROUP_LINK}'>Felaz Fortik</a>"
                else:
                    caption = f"<a href='{GROUP_LINK}'>Felaz Fortik</a>"
                bot.send_photo(CHANNEL_USERNAME, photo_id, caption=caption, parse_mode='HTML')

            elif message.video:
                video_id = message.video.file_id
                caption = message.caption
                if caption is not None:
                    caption = f"{message.caption}\n\n\n\n<a href='{GROUP_LINK}'>Felaz Fortik</a>"
                else:
                    caption = f"<a href='{GROUP_LINK}'>Felaz Fortik</a>"
                bot.send_video(CHANNEL_USERNAME, video_id, caption=caption, parse_mode='HTML')

            elif message.document:
                document_id = message.document.file_id
                caption = message.caption
                if caption is not None:
                    caption = f"{message.caption}\n\n\n\n<a href='{GROUP_LINK}'>Felaz Fortik</a>"
                else:
                    caption = f"\n\n\n\n<a href='{GROUP_LINK}'>Felaz Fortik</a>"

                bot.send_document(CHANNEL_USERNAME, document_id, caption=caption, parse_mode='HTML')

            elif message.animation:
                animation_id = message.animation.file_id
                caption = message.caption
                if caption is not None:
                    caption = f"{message.caption}\n\n\n\n<a href='{GROUP_LINK}'>Felaz Fortik</a>"
                else:
                    caption = f"<a href='{GROUP_LINK}'>Felaz Fortik</a>"
                bot.send_animation(CHANNEL_USERNAME, animation_id, caption=caption, parse_mode='HTML')

            bot.send_message(message.chat.id, f"{user}, ваш пост успешно отправлен в канал!")
        except Exception as e:
            bot.send_message(message.chat.id, f"Произошла ошибка: {e}")

if __name__ == '__main__':
    while True:
        try:
            bot.polling(none_stop=True)
        except Exception as e:
            time.sleep(3)
            print(e)


Библиотеки:

Цитата
⁡pip install pyTelegramBotAPI


Так же 2 файла:

adm.json - нужен для хранения username администрации
config.py - хранится токен, root админы, ссылка на подпись и т.д

Особенности root админки заключается в том, что
он может добавлять и удалять администраторов.​



Особенность обычной админки:
доступ к постингу​



Нет админки:
Бот не отвечает

▪️ Скачать с Облака 2,01 КБ

Подписывайтесь! Рекомендуйте нашу группу своим знакомым профессионалам в IT WiN-Prog Наша группа ВКонтакте!



Форум » ψ Общий раздел » Программирование » Python » Бот постинг в канал Telegram (Бот для пересыла постов с бота в канал для облегчения жизни)
  • Страница 1 из 1
  • 1
Поиск: