首页 > 解决方案 > 没有人来自哪里

问题描述

我正在尝试编写我的机器人电报,其想法是,例如,通过选择内联按钮 20 分钟,20 分钟后用户将收到通知,或者更确切地说是最初用 exel 和 python 编写的链接将此数据转换为 JSON,然后显示在电报机器人中。但我遇到了一个小易碎品。一切都很好,除了链接之外,我还收到消息none,我不明白它来自哪里。我会很高兴你的帮助。

这是主要的机器人代码:

# BackHelperBot

# --- основной импорт модулей для работы ---

from aiogram import Bot, bot, types
from aiogram.dispatcher import Dispatcher
from aiogram.types import ReplyKeyboardRemove, \
    ReplyKeyboardMarkup, KeyboardButton, \
    InlineKeyboardMarkup, InlineKeyboardButton
from aiogram.utils import executor
import asyncio


# --- импорт токена бота ---

from conf import TOKEN

# --- импорт файлов и функций ---

import time
from timerminuta import timer_number
from timerminuta import timer_number_1
from timerminuta import timer_number_2
import json
from reck import get_new_reck


# --- инициализация бота ---

bot = Bot(token=TOKEN)
dp = Dispatcher(bot)


# --- 1 кнопкa основного меню ---

button1 = KeyboardButton('Напоминание') # --- напомнить про то, что нужно выровнять спину

main_menu_razmetka = ReplyKeyboardMarkup().row(button1) # --- разметка основного меню


# --- старт бота по коменде /start ---

@dp.message_handler(commands=['start']) # --- Старт бота(вызов основного меню и 
описание(краткое) второго меню)
async def start_bot_command(message: types.Message):
    await message.reply("Здравствуйте {0.first_name}\nВас приветствует бот\n---- BackHelperBot 
----\n-----------------------------------------------------\nВы можете:\nНастороить 
напоминание нажав в меню кнопку 'Напоминание'".format(message.from_user), 
reply_markup=main_menu_razmetka)


# --- Инлайн кнопки для каждой кнопки меню ---

inline_button_1 = InlineKeyboardButton('Через 20 минут', callback_data='inline_btn_1') # --- 
напоминание через 30 минут
inline_button_2 = InlineKeyboardButton('Через 45 минут', callback_data='inline_btn_2') # --- 
напоминание через 1 час
inline_button_3 = InlineKeyboardButton('Через 1,5 часа', callback_data='inline_btn_3') # --- 
напоминание через 2 часа

inline_button_menu_1 = 
 InlineKeyboardMarkup(row_width=2).add(inline_button_1).add(inline_button_2).add(inline_button_3) # 
--- инлайн меню "Напоминание"

# --- основное меню ---
@dp.message_handler()
async def call_menu_of_inline(message: types.Message):
    if message.text == 'Напоминание':
        await message.reply("Выберите как записаться:", reply_markup=inline_button_menu_1) # - 
-- инлайн меню "Напоминание"


# --- использание инлайн кноок ---

@dp.callback_query_handler(lambda c: c.data == 'inline_btn_1') # --- напоминание через 20 
минут
async def process_callback_button1(callback_query: types.CallbackQuery):
    await bot.answer_callback_query(callback_query.id)
    timer_number()
    with open("vivod_reck.json") as file:
        vocabulary = json.load(file)


    for back in range (1, 6):
        for k, v in sorted(vocabulary.items())[-2:]:
            link = f"{v['link']}"
            await bot.send_message(callback_query.from_user.id, link)
            time.sleep(3)



# Полигон ------------------------------------------------------------------------------------ 
-----------------------

if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    # loop.create_task(news_every_minute())
    executor.start_polling(dp)

这是从 exel 文件中读取链接并写入 JSON 的代码

from typing_extensions import runtime
import json
import openpyxl


book = openpyxl.open("reck.xlsx", read_only = True)

sheet = book.active

def get_new_reck():

    vocabulary = {}
    for row in range(2, sheet.max_row + 1):
        number_link = sheet[row][0].value
        link = sheet[row][1].value

        # print(number_link, link)


        vocabulary[number_link] = {

            "link": link 

        }

    with open("vivod_reck.json", "w", encoding='utf-8') as file:
        json.dump(vocabulary, file, indent=4, ensure_ascii=False)


get_new_reck()

这是我在机器人中得到的:

这是我的 JSON 文件:

我该怎么办?为什么会这样?请帮帮我)

标签: pythonjsonopenpyxltelegram-botaiogram

解决方案


推荐阅读