YOKARAMANE
@YOKARAMANE

Как осуществить шифр цезаря в Telegram боте?

import telebot

bot= telebot.TeleBot('')

def encrypt(msg, shift):
  st=""
  for char in msg:
    if char == "":
      st = st + char
    elif char.isupper():
      st = st + chr((ord(char) + shift - 1072) % 26 + 1072)
    else:
      cipher = st + chr((ord(char) + shift - 1040) % 26 + 1040)
    return st


def decrypt(msg, shift):
  res = ''
  for char in msg:
    if char == ' ':
      res = res + char
    elif  char.isupper():
      res = res + chr((ord(char) - shift - 1072) % 26 + 1072)
    else:
      res = res + chr((ord(char) - shift - 1040) % 26 + 1040)
  return res

@bot.message_handler(commands=['start'])
def start(message):
    bot.reply_to(message,"Этот бот создан для шифрации/дешифрации сообщений\nЧтобы начать отправьте текст!")


@bot.message_handler(func=lambda m:True ,content_types=['document','audio','sticker','photo'])
def echo_(message):
    x='Бот поддерживает только текст!'
    bot.reply_to(message,x)
    
bot.polling()


Как осуществить шифр цезаря в боте?
  • Вопрос задан
  • 439 просмотров
Решения вопроса 1
Shurik24
@Shurik24
Обычный программист самоучка
def get_arg(arg):
    return arg.split()[1:]

@bot.message_handler(commands = ['encrypt'])
def msg_encrypt(message):
    arg = get_arg(message.text)
    if len(arg) >= 2:
        bot.reply_to(message,f"{encrypt(arg[0:-1], arg[-1])}")
    else:
        bot.reply_to(message,'Вы не указали параметры шифрования!\nПример: `/encrypt {Ваше сверх секретное сообщение} {ключ}`', parse_mode = 'Markdown')


Код довольно сырой, но я сделал тебе базу просто доработай ее, думаю с расшифровкой справишься
А и я тут уже вижу свои ошибки по типу encrypt будет получать лист а не строку но я думаю ты сможешь сделать функцию трансформации листа в строку, коль лень отпиши скину он там всего пару строк, но я человек ленивый было лень искать где он
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Vindicar
@Vindicar
RTFM!
Причем тут вообще input()? Эта функция занимается только вводом из консоли.
То же самое с print(), это исключительно консольный вывод.

Простейший способ, если бот имеет только это назначение и никакого другого - не париться с командами, а просто на каждое входящее сообщение отвечать шифрованным. Это будет модификация простого эхо-бота, которого ты взял за основу. Тебе же передаётся параметр message в обработчике, разбирайся с ним.

Иначе нужно будет разобрать входящее сообщение (оторвать от начала команду), и шифровать его.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы