英文:
How to call a discord bot`s function from another script. Python
问题
I can help you with the translation. Here's the translated content:
我正在尝试创建一个Python脚本,该脚本从Telegram频道获取消息并将其发送到Discord服务器的频道。我在处理Discord部分时遇到了问题,绝对不知道如何让它工作。
我已经有了这个主要的脚本:
# -*- coding: utf-8 -*-
from telethon.sync import TelegramClient
import config
import validators
from multiprocessing import Pipe
from discord_signal import send_message
import asyncio
api_id = config.API_ID
api_hash = config.API_HASH
phone_number = config.PHONE_NUMBER
BASE_URL = 'https://discord.com/api/v10'
CHANNEL_URL = BASE_URL + '/channels/{channel_id}';
class TelegramWorker:
def __init__(self):
self.client = TelegramClient('your_account', api_id, api_hash)
self.client.connect()
self.client.start()
self.dp = self.client.get_entity(config.CHANNEL_T)
def get_messages(self):
messages = self.client.get_messages(self.dp, limit=1000000000000)
a = []
for item in messages:
item = item.text
if item:
if validators.url(item):
a.append(item)
return a
def main():
tel = TelegramWorker()
a = tel.get_messages()
print(a)
for item in a:
send_message(item)
if __name__ == '__main__':
main()
当我运行这个脚本时,Python会导入第二个脚本,该脚本使用"discord.py"库运行机器人。运行后什么都不会发生。
这是第二个脚本:
import discord
from discord.ext import commands
import config
import datetime
intents = discord.Intents.default()
intents.message_content = True
bot = commands.Bot(command_prefix='!', intents=intents)
@bot.event
async def on_ready():
now_time = datetime.datetime.now()
print(f'机器人已启动。时间:{now_time}')
async def send_message(msg):
channel = bot.get_channel(id=config.DISCORD_CHANNEL_ID)
await channel.send(msg)
bot.run(config.DISCORD_TOKEN)
有人可以帮助我吗?
I've provided the translated content from your code, excluding the parts that you requested not to translate. If you have any further questions or need assistance with your code, please feel free to ask.
英文:
I am trying to make a python script, that takes messages from a telegram channel and send them to the discord server`s channel. I am stuck with discord. Absolutely cant have an idea how to make it works.
I already have this main scripts:
# -*- coding: utf-8 -*-
from telethon.sync import TelegramClient
import config
import validators
from multiprocessing import Pipe
from discord_signal import send_message
import asyncio
api_id = config.API_ID
api_hash = config.API_HASH
phone_number = config.PHONE_NUMBER
BASE_URL = 'https://discord.com/api/v10'
CHANNEL_URL = BASE_URL + '/channels/{channel_id}'
class TelegramWorker:
def __init__(self):
self.client = TelegramClient('your_account', api_id, api_hash)
self.client.connect()
self.client.start()
self.dp = self.client.get_entity(config.CHANNEL_T)
def get_messages(self):
messages = self.client.get_messages(self.dp, limit=1000000000000)
a = []
for item in messages:
item = item.text
if item:
if validators.url(item):
a.append(item)
return a
def main():
tel = TelegramWorker()
a = tel.get_messages()
print(a)
for item in a:
send_message(item)
if __name__ == '__main__':
main()
When I run this, python import second script, that run bot with library "discord.py". After it run it, nothing happens.
Here is the second script:
import discord
from discord.ext import commands
import config
import datetime
intents = discord.Intents.default()
intents.message_content = True
bot = commands.Bot(command_prefix='!', intents=intents)
@bot.event
async def on_ready():
now_time = datetime.datetime.now()
print(f'BOT STARTED. TIME: {now_time}')
async def send_message(msg):
channel = bot.get_channel(id=config.DISCORD_CHANNEL_ID)
await channel.send(msg)
bot.run(config.DISCORD_TOKEN)
Can anyone help me?
答案1
得分: 1
请注意,当你导入send_message
时,编译器会在bot.run(config.DISCORD_TOKEN)
这一行陷入循环,因为这个函数会启动一个无限循环来运行你的 Discord 机器人。换句话说,你的 Telegram 机器人将永远不会启动。
你可以尝试在一个线程中运行你的 Discord 机器人,或者在on_ready
事件中插入加载 Telegram 消息的函数。
然而,如果你只是想在 Discord 频道中发送一条消息,你不需要一个机器人。只需为该频道创建一个 Webhook 并复制链接。要将消息发布到 Webhook,你可以使用requests
或discord.py
提供的SyncWebhook:
from discord import SyncWebhook
WEBHOOK_URL = ""
def main():
webhook = SyncWebhook.from_url(WEBHOOK_URL)
tel = TelegramWorker()
a = tel.get_messages()
print(a)
for item in a:
webhook.send(a)
在这个问题中详细了解如何向 Discord Webhook 发送消息的更多细节。
英文:
Note that when you import send_message
, the compiler will get stuck on the bot.run(config.DISCORD_TOKEN)
line, as this function starts an infinite loop to run your discord bot. That is, your telegram bot will never start.
You can try running your discord bot in a Thread or insert your function that loads telegram messages in the on_ready
event.
However, if you simply want to send a message in a discord channel, you don't need a bot. Just create a Webhook for the channel and copy the link. To post a message to the webhook you can use requests
or the SyncWebook provided by discord.py
:
from discord import SyncWebhook
WEBHOOK_URL = ""
def main():
webhook = SyncWebhook.from_url(WEBHOOK_URL)
tel = TelegramWorker()
a = tel.get_messages()
print(a)
for item in a:
webhook.send(a)
> Read more details on how to send a message to a discord webhook in this question.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论