python - 将重复的消息从数据库发送到 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")
我的问题是,如果我运行这个程序一次,会发送几个笑话,但如果我再次运行程序,会发送相同的笑话,并且会重复笑话。我想确保每次都发送新的笑话。
解决方案
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}