Телеграмм бот пересылка сообщений python

Saved searches

Use saved searches to filter your results more quickly

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.

Бот, пересылающий сообщения из чатов ВК в Telegram и обратно

License

Whiletruedoend/Vk-to-telegram-transfer-bot

This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Sign In Required

Please sign in to use Codespaces.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching Xcode

If nothing happens, download Xcode and try again.

Launching Visual Studio Code

Your codespace will open once ready.

There was a problem preparing your codespace, please try again.

Latest commit

Git stats

Files

Failed to load latest commit information.

README.md

Многофункциональный, написанный одной ногой на питоне бот для пересылки сообщений из ВК в Telegram и наоборот. Изначально он планировался исключительно для личного пользования, однако я передумал и решил выложить в общий доступ в связи с тем, что, возможно, он может кому-то понадобиться.

  • Пересылка текстовых сообщений из ВК в Telegram и наоборот
  • Пересылка изображений/стикеров/аудио/видео/документов/голосовых сообщений (Только из ВК в Telegram!)
  • Пересылка стикеров из Telegram в ВК
  • Поддержка личных сообщений и групповых чатов
  • Удобный файл конфигурации
  • Поддержка прокси для Telegram

Для работы вам понадобиться:

  • Python 3
  • Git клиент ( я использую Git Bash )
  • Аккаунт в ВК ( будем использовать в качестве ботинка )
  • Бот в Telegram ( можно создать через BotFather )
  • (При желании) Хостинг, на котором будет работать бот (Например, PythonAnywhere)
Читайте также:  Python dict сортировка по ключам

Для начала займёмся установкой скрипта. Открываем Git и пишем:

git clone https://github.com/Whiletruedoend/Vk-to-telegram-transfer-bot cd Vk-to-telegram-transfer-bot pip3 install -r requirements.txt или же (если вдруг не сработало): python -m pip install -r requirements.txt

Для запуска в docker’е необходимо собрать образ и запустить его. Для сборки образа необходимо в корневой директории проекта выполнить команду

docker build . -t vk_to_telegram_transfer_bot

Для запуска образа необходимо в корневой директории проекта выполнить команду

docker run vk_to_telegram_transfer_bot

Запуск при помощи docker-compose

Для запуска в docker’е необходимо собрать образ и запустить его. Для сборки образа необходимо в корневой директории проекта выполнить команду

Все настройки будут производиться в файле config.py Для начала откроем его и вставим логин и пароль от аккаунта в ВК (таблицы ‘vk_login’ и ‘vk_password’ ) и токен бота в Telegram’e ( таблица ‘telegram_token’ )

Далее мы будем настраивать чат для передачи сообщений. Для этого необходимо:

  1. Создать чат в Telegram’e
  2. Добавить туда бота
  3. Написать ‘Дай ID’, после чего бот должен написать вам ID чата
  4. Взять ID чата/пользователя, откуда/куда будут пересылаться сообщения
  5. Добавить в конфиг поля:

, где — локальный ID чата для бота (!), либо ID пользователя, с которым будет связан чат в Telegram’e, а — — тот самый ID чата, который мы получили, прописав команду ‘Дай ID’. Отбратите внимание, что — всегда идёт с минусом в начале, кроме того, знаки <> прописывать не нужно! ‘Живой пример’:

setCell( "vk_1", '-249416176' ) setCell( "t_-249416176", '1' )

Здесь мы видим, что для аккаунта ВК из чата 1 все сообщения будут пересылаться в чат ‘-249416176’ в Telegram, и наоборот. Надеюсь, всё понятно, по какому принципу нужно всё делать. P.S. Я дальнейшем я планирую облегчить систему создания тоннелей ВК телега, но, пока что, пусть всё останется так.

У бота в Telegram должен быть:

  1. Отключен режим приватности ( Bot Father —> Ваш бот —> Bot Settings —> Group Privacy —> Turn Off )
  2. Включена поддержка групповых чатов ( Bot Father —> Ваш бот —> Bot Settings —> Allow groups? Turn groups On )
  • Доработать отправку картинок ( Сейчас устроено так, что если отправлено несколько фоточек в ВК, то в телегу придёт только первая) Done!
  • Улучшить отображение пересланных сообщений ( сейчас это еле работает, спасибо хоть на этом) Done!
  • Сделать реагирование на различные события (Ex. при обновлении аватарки чата в ВК, инвайте/кике пользователя, бот оповещал об этом в Telegram ) Done!
  • При отправке стикера из Telegram в ВК он конвертировался из формата webp в png и отправлялся как картинка ( Я уже знаю как это можно сделать, но не могу найти годный конвертер ) Done!
  • Переписать проект с нуля
  • Настроить передачу картинок/видео/файлов/документов из Telegram в ВК
  • Более удобная конфигурация прямо в боте
  • Синхронизация чатов (Название, аватарка)
Читайте также:  Javascript для создания формы

Если у вас есть какие-то идеи или собственные наработки, или же просто вопросы по поводу работоспособности кода, то вы всегда можете обратиться ко мне по следующим адресам:

Источник

Как пересылать сообщения пользователя отправленные боту другому пользователю?

То есть метод send_message принимает 2 позиционных аргумента. Первый — это ID чата с пользователем, кому вывести сообщение. Второй аргумент — текст пересылаемого сообщения. Можно чуть доработать и заменить строку следующим:

. msg = "Пользователь <> написал \"<>\".".format(message.from_user.username, message.text) bot.send_message('ID чата пользователя, которому необходимо сообщение переслать', msg) . 

На выходе получим сообщение вида: Пользователь Someone написал «Привет! Как дела?».

ID чата можно получить с помочью небольшой функции, которая присылает сообщение:

@bot.message_handler(commands=["id"]) # Получить ID чата при отправке сообщения /id def chat_id(message): my_chat_id = int(message.chat.id) bot.send_message(message.chat.id, my_chat_id)

А как можно передать всю информацию, которую пользователь отправил боту (у меня 2 клавиатуры и текст )?

IvanOk, что значит 2 клавиатуры? Клавиатуру передаёт не пользователь, а бот. Боту эта информация не приходит.

Напиши конкретный пример, что отправляет один пользователь, что получает второй.

Пользователь 1 заходит в бота и выбирает кнопкой вариант питания
Пользователь 2 хочет получить информацию вида (пользователь 1 выбрал «Обед мясо» + вопрос «где быстро готовят»)
некоторые кнопки пропущены тк лимит на 10 к знаков
Потом пользователь 2 пишет ему совет и выбирает место (оно тоже представлено ввиде кнопок)
markup_menu = types.ReplyKeyboardMarkup (resize_keyboard=True, row_width=1)

btn_zavtrak= types.KeyboardButton (‘Хочу позавтракать’)
btn_obed = types.KeyboardButton (‘Хочу пообедать’)
btn_uzin = types.KeyboardButton (‘Хочу поужинать’)
btn_cofe = types.KeyboardButton (‘Хочу выпить кофе’)
btn_vsrecha = types.KeyboardButton (‘Место для встречи’)
btn_vipit = types.KeyboardButton (‘Хочу выпить’)

markup_menu.add(btn_cofe, btn_obed, btn_uzin, btn_vipit, btn_zavtrak, btn_vsrecha)

markup_inline_zavtrak = types.InlineKeyboardMarkup()
btn_legkii_zavtrak = types.InlineKeyboardButton (‘Легкий’,callback_data =’Легкий завтрак’)
markup_inline_zavtrak.add(btn_legkii_zavtrak, btn_angliiski_zavtrak, btn_sitnii_zavtrak, btn_france_zavtrak, btn_postnii_zavtrak, btn_sweden_zavtrak )

markup_inline_obed = types.InlineKeyboardMarkup()
btn_delovoi_obed = types.InlineKeyboardButton (‘Деловой’,callback_data =’Деловой обед’)
markup_inline_obed.add(btn_delovoi_obed, btn_komplex_obed, btn_maso_obed, btn_postnii_obed, btn_riba_obed )

markup_inline_uzin = types.InlineKeyboardMarkup()
btn_for2_uzin = types.InlineKeyboardButton (‘На двоих’,callback_data =’Ужин на двоих’)

markup_inline_uzin.add (btn_euro_uzin, btn_for2_uzin, btn_friends_uzin, btn_italy_uzin, btn_mix_uzin, btn_vostok_uzin, btn_france_uzin)

markup_inline_cofe = types.InlineKeyboardMarkup()
btn_cofe_and_pekarna = types.InlineKeyboardButton (‘Кофе+пекарня’,callback_data =’Кофе+пекарня’)
markup_inline_cofe.add (btn_cofe_and_pekarna, btn_cofeina, btn_cofe_and_kuhnia, btn_cofe_to_go)

Читайте также:  Https html reference io

markup_inline_vipit = types.InlineKeyboardMarkup()
btn_vipit_bat_and_kuhnia= types.InlineKeyboardButton (‘Бар и кухня’,callback_data =’Бар и кухня’)
markup_inline_vipit.add(btn_vipit_bat_and_kuhnia, btn_vipit_bat_local, btn_vipit_bat_and_music, btn_vipit_bat_and_club, btn_vipit_bat_and_karaoke)

markup_inline_vstrecha = types.InlineKeyboardMarkup()
btn_delo_vstrecha = types.InlineKeyboardButton (‘Деловая встреча’,callback_data =’Деловая встреча’)
markup_inline_vstrecha.add(btn_delo_vstrecha, btn_vstrecha_with_friends, btn_semia_vstrecha, btn_vstrecha_with_collegi)

markup_inline_otvet = types.InlineKeyboardMarkup()
btn_otvet = types.InlineKeyboardButton (‘Вопросов нет’,callback_data =’Вопросов нет’)
markup_inline_otvet.add(btn_otvet)

@bot.message_handler(commands=[‘start’, ‘help’])
def send_welcome(message):
bot.reply_to(message, «Привет! Я бот Tockl! Что хочешь поесть? \n\n Мануал «

@bot.message_handler(func=lambda message: True)

def echo_all(message):
if message.text == «Хочу выпить»:
bot.reply_to(message, ‘Варианты выпить’, reply_markup=markup_inline_vipit)

elif message.text == «Хочу пообедать»:
bot.reply_to(message, ‘Варианты обедов’, reply_markup=markup_inline_obed )

else:
bot.reply_to(message,’Ваш запрос принят, обработка займет не более 5 мин.’)

@bot.message_handler(func=lambda message: True, content_types=[‘location’])
def user_location (message):
lon = message.location.longitude
lat = message.location.latitude
print(‘Широта <> долгота <>‘.format(lon,lat))

distance =[]
for m in const.RESTAURANTS:
result = vincenty ((m[‘latm’], m [‘lonm’]), (lat, lon)).kilometers
distance.append(result)
index = distance.index(min (distance ))

bot.send_message(message.chat.id, ‘Ближайший к вам ресторан’)
bot.send_venue(message.chat.id, const.RESTAURANTS [index] [‘latm’],
const.RESTAURANTS [index] [‘lonm’],
const.RESTAURANTS [index] [‘title’],
const.RESTAURANTS [index] [‘address’])

def call_back_zatrak(call):
print (call)

if call.data == ‘Кофе+пекарня’ :
bot.send_message(call.message.chat.id, text = «»»
Кофе+пекарня выбрано

Если есть вопрос можете его задать «»», reply_markup= markup_inline_otvet,)

if call.data == ‘Мясо обед’:
bot.send_message(call.message.chat.id, text = «»»
Если есть вопрос можете его задать «»», reply_markup= markup_inline_otvet,)

if call.data == ‘Вопросов нет’:
bot.send_message(call.message.chat.id, text = «»»
Ваш запрос принят, обработка займет не более 5 мин. «»»,)

Источник

Пересылка сообщений

bot.forward_message( id откуда, id куда, message.message_id)
А вот с третьим параметром загвоздка. Что это, id сообщения? А каким образом мне его узнать? И не я должна его узнавать , а программа, потому что там будет много сообщений. В общем прошу помощи. Буду благодарна.

Пересылка сообщений, написанных боту
Здраствуйте! Пишу бота который будет переодически спрашивать сотрудников компании о проделаной.

Пересылка сообщений из произвольного чата мне через библиотеку TeleBotAPI
При написании бота на пайтоне столкнулся с проблемой, нужно из произвольного канала где бот не.

Отправка/пересылка аудио ботом
Всем привет, решил ознакомиться с api telegram через python-telegram-bot, как отправить музыку не.

Пересылка сообщений
Здравствуйте.Еще только начинаю разбираться,вот такой вопрос: Стоит задача из клиентской локальной.

Пересылка сообщений
необходимо что б дочерний процесс переслал сообщение радителю я написал следующее это.

У каждого сообщения есть свой id. Для теста вот тебе код.

@bot.message_handler(commands=['test']) def unId(message): bot.send_message(message.chat.id, message)

Источник

Оцените статью