Мой бот Telegram действует как календарь матчей моей любимой команды. Он должен извлечь этот календарь из сайта, публикующего календарь матчей, поместить этот календарь в локальную базу данных SQLite и получить к нему доступ с помощью команд в Telegram (
, /prossime10, /calendario). Я также хочу, чтобы, если он найдет совпадение с сегодняшней датой, отправил сообщение на канал Telegram. Мне удалось получить напоминание о работе в качестве команды, но я понятия не имею, как заставить его работать для автоматического выполнения.
Не могу отправлять сообщения с помощью send_match_reminder() лично, на канале или в группе.
Я могу получить три основных команды отвечать мне даже в группах, однако хотелось бы иметь возможность реализовать эту возможность и на каналах (если бы это было возможно).
В том случае, если на канале невозможно вызвать команды, мне бы хотелось, чтобы функция напоминания запускалась, по крайней мере, каждое утро и, если она находит совпадение, отправляла на канал сообщение с информацией о совпадении. >
import asyncio
import requests
import telegram
import os
import string
import locale
import random
import logging
import schedule
import time
import sqlite3
from lxml import html
from datetime import datetime
from dotenv import load_dotenv
from telegram import Update, InlineKeyboardButton, InlineKeyboardMarkup
from telegram.ext import ApplicationBuilder, CommandHandler, MessageHandler, filters, CallbackContext, CallbackQueryHandler
load_dotenv()
CONNESSIONE_DB = sqlite3.connect('JUVENTUS_MATCHES.db')
CONNESSIONE = CONNESSIONE_DB.cursor()
locale.setlocale(locale.LC_TIME, 'it_IT.UTF-8')
async def start_bot(update: Update, context: CallbackContext):
await update.message.reply_text("HI!")
.
.
.
.
.
async def get_next_match():
global CONNESSIONE_DB, CONNESSIONE
CONNESSIONE.execute("SELECT * FROM MATCHES ORDER BY DATA")
MATCHES = CONNESSIONE.fetchall()
TODAY = datetime.today().strftime("%Y-%m-%d")
for MATCH in MATCHES:
if MATCH[2] >= TODAY:
return MATCH
return None
async def get_next_10_matches():
global CONNESSIONE_DB, CONNESSIONE
CONNESSIONE.execute("SELECT * FROM MATCHES ORDER BY DATA")
MATCHES = CONNESSIONE.fetchall()
TODAY = datetime.today().strftime("%Y-%m-%d")
NEXT_10_MATCHES = []
for MATCH in MATCHES:
if MATCH[2] >= TODAY:
NEXT_10_MATCHES.append(MATCH)
if len(NEXT_10_MATCHES) == 10:
break
return NEXT_10_MATCHES
async def get_all_match():
global CONNESSIONE_DB, CONNESSIONE
CONNESSIONE.execute("SELECT * FROM MATCHES ORDER BY DATA")
MATCHES = CONNESSIONE.fetchall()
TODAY = datetime.today().strftime("%Y-%m-%d")
ALL_MATCHES = []
for MATCH in MATCHES:
ALL_MATCHES.append(MATCH)
return ALL_MATCHES
async def get_today_match():
global CONNESSIONE_DB, CONNESSIONE
TODAY = datetime.today().strftime("%Y-%m-%d")
CONNESSIONE.execute("SELECT * FROM MATCHES WHERE DATA =?", (TODAY,))
MATCHES = CONNESSIONE.fetchall()
for MATCH in MATCHES:
if MATCH[2] == TODAY:
return MATCH
return None
.
.
.
.
.
async def send_reminder(update: Update, context: CallbackContext):
MATCH = await get_today_match()
if MATCH:
MESSAGE = f"⚠️ OGGI GIOCHIAMO![/b] ⚠️\n\n"[b]
if MATCH[0] == "Serie A":
MESSAGE += f"🏆 {MATCH[0]} - {MATCH[4]}\n⚽️ {MATCH[1]}\n📅 {string.capwords(datetime.strptime(MATCH[2], '%Y-%m-%d').strftime('%A %d %B %Y'))}\n🕚 {MATCH[3]}[/b]\n\n"[b]
else:
MESSAGE += f"🏆 {MATCH[0]}\n⚽️ {MATCH[1]}\n📅 {string.capwords(datetime.strptime(MATCH[2], '%Y-%m-%d').strftime('%A %d %B %Y'))}\n🕚 {MATCH[3]}[/b]\n\n"[b]
await context.bot.send_message(chat_id=update.effective_chat.id, text=MESSAGE, parse_mode="HTML")
else:
MESSAGE = f"❗️NON CI SONO PARTITE IN PROGRAMMA❗️[/b]"
await context.bot.send_message(chat_id=update.effective_chat.id, text=MESSAGE, parse_mode="HTML")
.
.
.
.
.
def main():
app = ApplicationBuilder() \
.read_timeout(100) \
.write_timeout(100) \
.token(os.environ["BOT_TOKEN"]) \
.build()
app.add_handler(CommandHandler("start", start_bot))
app.add_handler(CommandHandler("prossima", next_match_command))
app.add_handler(CommandHandler("prossime10", next_10_matches_command))
app.add_handler(CommandHandler("calendario", get_all_command))
app.add_handler(CommandHandler("reminder", send_reminder))
app.run_polling()
if __name__ == "__main__":
main()
Бот работает с помощью команд, но я хотел бы сделать его автоматизированным, чтобы он мог отправлять напоминания в канал/группу/частный чат, а также отвечать на три типа фундаментальных сообщений. команды, которые я хотел бы реализовать.
Мой бот Telegram действует как календарь матчей моей любимой команды. Он должен извлечь этот календарь из сайта, публикующего календарь матчей, поместить этот календарь в локальную базу данных SQLite и получить к нему доступ с помощью команд в Telegram ([code]/prossime[/code], /prossime10, /calendario). Я также хочу, чтобы, если он найдет совпадение с сегодняшней датой, отправил сообщение на канал Telegram. Мне удалось получить напоминание о работе в качестве команды, но я понятия не имею, как заставить его работать для автоматического выполнения.[b][list] [*]Не могу отправлять сообщения с помощью send_match_reminder() лично, на канале или в группе.
[*]Я могу получить три основных команды отвечать мне даже в группах, однако хотелось бы иметь возможность реализовать эту возможность и на каналах (если бы это было возможно).
[*]В том случае, если на канале невозможно вызвать команды, мне бы хотелось, чтобы функция напоминания запускалась, по крайней мере, каждое утро и, если она находит совпадение, отправляла на канал сообщение с информацией о совпадении. >
[/list] [code]import asyncio import requests import telegram import os import string import locale import random import logging import schedule import time import sqlite3 from lxml import html from datetime import datetime from dotenv import load_dotenv from telegram import Update, InlineKeyboardButton, InlineKeyboardMarkup from telegram.ext import ApplicationBuilder, CommandHandler, MessageHandler, filters, CallbackContext, CallbackQueryHandler
async def get_next_match(): global CONNESSIONE_DB, CONNESSIONE CONNESSIONE.execute("SELECT * FROM MATCHES ORDER BY DATA") MATCHES = CONNESSIONE.fetchall() TODAY = datetime.today().strftime("%Y-%m-%d")
for MATCH in MATCHES: if MATCH[2] >= TODAY: return MATCH
return None
async def get_next_10_matches(): global CONNESSIONE_DB, CONNESSIONE CONNESSIONE.execute("SELECT * FROM MATCHES ORDER BY DATA") MATCHES = CONNESSIONE.fetchall() TODAY = datetime.today().strftime("%Y-%m-%d")
NEXT_10_MATCHES = [] for MATCH in MATCHES: if MATCH[2] >= TODAY: NEXT_10_MATCHES.append(MATCH) if len(NEXT_10_MATCHES) == 10: break
return NEXT_10_MATCHES
async def get_all_match(): global CONNESSIONE_DB, CONNESSIONE CONNESSIONE.execute("SELECT * FROM MATCHES ORDER BY DATA") MATCHES = CONNESSIONE.fetchall() TODAY = datetime.today().strftime("%Y-%m-%d")
ALL_MATCHES = [] for MATCH in MATCHES: ALL_MATCHES.append(MATCH)
return ALL_MATCHES
async def get_today_match(): global CONNESSIONE_DB, CONNESSIONE TODAY = datetime.today().strftime("%Y-%m-%d") CONNESSIONE.execute("SELECT * FROM MATCHES WHERE DATA =?", (TODAY,)) MATCHES = CONNESSIONE.fetchall()
for MATCH in MATCHES: if MATCH[2] == TODAY: return MATCH
else: MESSAGE = f"❗️NON CI SONO PARTITE IN PROGRAMMA❗️[/b]" await context.bot.send_message(chat_id=update.effective_chat.id, text=MESSAGE, parse_mode="HTML")
if __name__ == "__main__": main() [/code] Бот работает с помощью команд, но я хотел бы сделать его автоматизированным, чтобы он мог отправлять напоминания в канал/группу/частный чат, а также отвечать на три типа фундаментальных сообщений. команды, которые я хотел бы реализовать.
Я работаю над созданием чат-бота с искусственным интеллектом. Хотя серверная часть почти завершена, я борюсь с реализацией пользовательского интерфейса.
Проблема
Сообщения от обоих бот и пользователь отображаются дважды. Например, если я ввожу...
Я работаю над созданием чат-бота с искусственным интеллектом. Хотя серверная часть почти завершена, я борюсь с реализацией пользовательского интерфейса.
Проблема
Сообщения от обоих бот и пользователь отображаются дважды. Например, если я ввожу...
Бот — это первый бот, который общается с менеджером рассылки, а бот-спам — это бот, в котором происходит рассылка.
def step5(message):
global p
conn = sqlite3.connect('../chatgpt_database.db')
cursor = conn.cursor()
cursor.execute( SELECT tid FROM...
Бот — это первый бот, который общается с менеджером рассылки, а бот-спам — это бот, в котором происходит рассылка.
def step5(message):
global p
conn = sqlite3.connect('../chatgpt_database.db')
cursor = conn.cursor()
cursor.execute( SELECT tid FROM...