首页 > 解决方案 > 将重复的消息从数据库发送到 Telegram 频道

问题描述

我用 Python 编写了这个程序,它从数据库中提取了一些笑话并将它们发布在 Telegram 频道上:

import requests
import sqlite3
import random
import re

def send(msg,token,ca):
    url = f"https://api.telegram.org/bot{token}/sendMessage?chat_id={ca}&text={msg}"
    mypay = {"UrlBox":url,"AgentBox" : "Google Chrome","VersionsList" : "HTTP/1.1","MethodList" : "GET"}
    http = requests.post("http://httpdebugger.com/tools/ViewHttpHeaders.aspx",data=mypay)

conn = sqlite3.connect("jokjok.db")
c = conn.cursor()
emoji_list = ["","","",""]
emoji_taki = ["","","","","",""]
chand = 5


c.execute(f"SELECT * FROM jok ORDER BY ROWID ASC LIMIT {chand}")
for i in list(range(chand)):
    jok = str(c.fetchone())
    tmp = jok
    jok = jok.replace("(","")
    jok = jok.replace(")","")
    jok = jok.replace("'","")
    jok = jok.replace("\\u200c"," ")
    jok = jok.replace("\"","")
    jok = jok.replace("[","")
    jok = jok.replace("]","")
    jok = jok.replace("\\n","""
    """)
    jok = jok.replace("\\","")
    jok = re.sub(",$", "", jok)
    jok = f"{jok} {random.choice(emoji_list)}"

    send(jok,"mykey","@jok_khone_channel")
    if random.choice([False,False,False,False,False,False,False,False,True,True,True,True]):
        send(random.choice(emoji_taki),"mykey","@jok_khone_channel")

我的问题是,如果我运行这个程序一次,会发送几个笑话,但如果我再次运行程序,会发送相同的笑话,并且会重复笑话。我想确保每次都发送新的笑话。

标签: pythonsqlsqlitetelegram-bot

解决方案


sent_jokes您可以使用列创建一个新表(joke_id, is_send),在其中跟踪您已经发送的笑话。然后将您的 SQL 查询更改为

SELECT * FROM jok  
JOIN sent_jokes ON jok.id=sent_jokes.joke_id 
WHERE is_send is FALSE 
ORDER BY ROWID ASC LIMIT {chand}

推荐阅读