lunarflu HF Staff commited on
Commit
6c72ff4
Β·
1 Parent(s): a7214ab

Synced repo using 'sync_with_huggingface' Github Action

Browse files
Files changed (1) hide show
  1. app.py +11 -268
app.py CHANGED
@@ -52,25 +52,11 @@ intents.message_content = True
52
 
53
  bot = commands.Bot(command_prefix='!', intents=intents)
54
 
55
- #---------------------------------------------------------------------------------------------------------------------------------------------
56
- @bot.command()
57
- async def info(ctx):
58
- current_directory = os.getcwd()
59
- temp_directory = tempfile.gettempdir()
60
- await ctx.reply(f"current_directory={current_directory}\n temp_directory={temp_directory}")
61
  #---------------------------------------------------------------------------------------------------------------------------------------------
62
  @bot.event
63
  async def on_ready():
64
  print('Logged on as', bot.user)
65
  bot.log_channel = bot.get_channel(1100458786826747945) # 1100458786826747945 = bot-test, 1107006391547342910 = lunarbot server
66
- #---------------------------------------------------------------------------------------------------------------------------------------------
67
- @bot.command()
68
- async def commands(ctx):
69
- try:
70
- if await safetychecks(ctx):
71
- await ctx.reply(f"Use !deepfloydif [prompt], !jojo !spidey or !sketch. Have fun! πŸ€—πŸ’–")
72
- except Exception as e:
73
- print(f"Error: unable to help :( {e}")
74
  #---------------------------------------------------------------------------------------------------------------------------------------------
75
  async def safetychecks(ctx):
76
  failure_emoji = '<:disagree:1098628957521313892>'
@@ -90,14 +76,12 @@ async def safetychecks(ctx):
90
  await ctx.message.add_reaction(failure_emoji)
91
  return False
92
 
 
93
  # review this, may be able to remove
94
  #βœ…βœ… check if the command is in the allowed channel(s)
95
  bot_test = 1100458786826747945
96
- deepfloydif_channel = 1113182673859518514
97
- jojo_channel = 1114217739473649764
98
- sketch_channel = 1114218145343877180
99
- spidey_channel = 1114218191594471514
100
- falcon_channel = 1116089829147557999
101
 
102
  channel_ids = [bot_test, deepfloydif_channel, jojo_channel, spidey_channel, sketch_channel, falcon_channel]
103
  if ctx.channel.id not in channel_ids:
@@ -105,7 +89,8 @@ async def safetychecks(ctx):
105
  thread = await ctx.message.create_thread(name=f'Channel Error')
106
  await thread.send(f"Error: {ctx.author.mention} commands are not permitted in {ctx.channel}")
107
  await ctx.message.add_reaction(failure_emoji)
108
- return False
 
109
 
110
  '''
111
  #βœ…βœ… check if the user has the required role(s)
@@ -135,199 +120,8 @@ async def safetychecks(ctx):
135
  print(f"Error: safetychecks failed somewhere, command will not continue, {e}")
136
  await ctx.message.reply(f"❌ <@811235357663297546> SC failed somewhere ❌ {e}") # this will always ping, as long as the bot has access to the channel
137
  await ctx.message.add_reaction(failure_emoji)
138
- #------------------------------------------------------------------------------------------------------------------------------
139
- async def on_message_safetychecks(message):
140
- failure_emoji = '<:disagree:1098628957521313892>'
141
- try:
142
- if message.author.bot:
143
- print(f"The bot will ignore its own messages.")
144
- return False
145
-
146
- # check if the bot is offline
147
- offline_bot_role_id = 1103676632667017266
148
- bot_member = message.guild.get_member(bot.user.id)
149
- if any(role.id == offline_bot_role_id for role in bot_member.roles):
150
- print(f"{message.author} The bot is offline or under maintenance. (Remove the offline-bot role to bring it online)")
151
- return False
152
-
153
- #βœ…βœ… check if the user has the required role(s)
154
- guild_id = 879548962464493619
155
- verified_role_id = 900063512829755413 # @verified = 900063512829755413, HF = 897376942817419265, fellows = 963431900825919498
156
- huggingfolks_role_id = 897376942817419265
157
- fellows_role_id = 963431900825919498
158
- contentcreator_role_id = 928589475968323636
159
- betatester_role_id = 1113511652990668893
160
-
161
- allowed_role_ids = [huggingfolks_role_id, fellows_role_id, contentcreator_role_id, betatester_role_id]
162
- guild = bot.get_guild(guild_id)
163
- user_roles = message.author.roles
164
- has_allowed_role = any(role.id in allowed_role_ids for role in user_roles)
165
- if not has_allowed_role:
166
- print(f"{ctx.author} does not have any of the required roles to activate the on_message check")
167
- return False
168
-
169
- return True
170
-
171
- except Exception as e:
172
- print(f"Error: on_message_safetychecks failed somewhere, command will not continue {e}")
173
- #------------------------------------------------------------------------------------------------------------------------------
174
-
175
- @bot.command()
176
- async def deepfloydifdemo(ctx):
177
- try:
178
- thread = await ctx.message.create_thread(name=f'{ctx.author} Demo Thread')
179
- await thread.send(f'{ctx.author.mention} Here is a demo for the !deepfloydif command!')
180
- await asyncio.sleep(0.5)
181
- await thread.send(f'https://cdn.discordapp.com/attachments/932563860597121054/1113483403258499142/image.png')
182
- except Exception as e:
183
- print(f"Error: {e}")
184
- await ctx.message.add_reaction('<:disagree:1098628957521313892>')
185
- #----------------------------------------------------------------------------------------------------------------------------------------------
186
- @bot.command()
187
- async def jojodemo(ctx):
188
- try:
189
- thread = await ctx.message.create_thread(name=f'JoJo Demo {ctx.author} ')
190
- await thread.send(f'{ctx.author.mention} Here is a demo for the !jojo command!')
191
- await asyncio.sleep(0.5)
192
- await thread.send(f'https://cdn.discordapp.com/attachments/932563860597121054/1114220616199966810/image.png')
193
- await thread.edit(archived=True)
194
- except Exception as e:
195
- print(f"Error: {e}")
196
- await ctx.message.add_reaction('<:disagree:1098628957521313892>')
197
- await thread.edit(archived=True)
198
- #----------------------------------------------------------------------------------------------------------------------------------------------
199
- @bot.command()
200
- async def sketchdemo(ctx):
201
- try:
202
- thread = await ctx.message.create_thread(name=f'Sketch Demo {ctx.author} ')
203
- await thread.send(f'{ctx.author.mention} Here is a demo for the !sketch command!')
204
- await asyncio.sleep(0.5)
205
- await thread.send(f'https://cdn.discordapp.com/attachments/932563860597121054/1114220716498370641/image.png')
206
- await thread.edit(archived=True)
207
- except Exception as e:
208
- print(f"Error: {e}")
209
- await ctx.message.add_reaction('<:disagree:1098628957521313892>')
210
- await thread.edit(archived=True)
211
- #----------------------------------------------------------------------------------------------------------------------------------------------
212
- @bot.command()
213
- async def spideydemo(ctx):
214
- try:
215
- thread = await ctx.message.create_thread(name=f'Spidey Demo {ctx.author} ')
216
- await thread.send(f'{ctx.author.mention} Here is a demo for the !spidey command!')
217
- await asyncio.sleep(0.5)
218
- await thread.send(f'https://cdn.discordapp.com/attachments/932563860597121054/1114220798085959690/image.png')
219
- await thread.edit(archived=True)
220
- except Exception as e:
221
- print(f"Error: {e}")
222
- await ctx.message.add_reaction('<:disagree:1098628957521313892>')
223
- await thread.edit(archived=True)
224
- #----------------------------------------------------------------------------------------------------------------------------------------------
225
- # jojo βœ…
226
- @bot.command()
227
- async def jojo(ctx):
228
- # img + face βœ…
229
- # img + no face βœ…
230
- # no image βœ…
231
- # no generation βœ…
232
- # responsive? βœ…
233
- # ratelimits? ❌
234
- # safety checks?βœ…
235
- # bot no crash βœ…
236
- try:
237
- if await safetychecks(ctx): #βœ…
238
- if ctx.channel.id == 1114217739473649764:
239
- await ctx.message.add_reaction('<a:loading:1114111677990981692>')
240
- thread = await ctx.message.create_thread(name=f'Jojo | {ctx.author}', auto_archive_duration=60)
241
- if ctx.message.attachments:
242
- await thread.send(f'{ctx.author.mention} Generating images in thread, can take ~1 minute...yare yare, daze ...')
243
- attachment = ctx.message.attachments[0]
244
- style = 'JoJo'
245
- #im = jojogan.predict(attachment.url, style)
246
- im = await asyncio.get_running_loop().run_in_executor(None, jojogan.predict, attachment.url, style)
247
- #await ctx.message.reply(f'Here is the {style} version of it', file=discord.File(im))
248
- await thread.send(f'{ctx.author.mention} Here is the {style} version of it', file=discord.File(im))
249
-
250
- #testing animated
251
- # <a:hugging_spin:1102656012621713488>
252
- await ctx.message.add_reaction('<:agree:1098629085955113011>') # βœ…
253
- await ctx.message.remove_reaction('<a:loading:1114111677990981692>', bot.user)
254
- await thread.edit(archived=True)
255
- else: # no image
256
- await thread.send(f"{ctx.author.mention} No attachments to be found...Can't animify dat! Try sending me an image πŸ˜‰")
257
- await ctx.message.add_reaction('<:disagree:1098628957521313892>') # ❌
258
- await ctx.message.remove_reaction('<a:loading:1114111677990981692>', bot.user)
259
- await thread.edit(archived=True)
260
- except Exception as e: # no generation / img + no face
261
- await fullqueue(e, thread)
262
- print(f"Error: {e}")
263
- await thread.send(f"{ctx.author.mention} Error: {e}")
264
- await ctx.message.add_reaction('<:disagree:1098628957521313892>') # ❌
265
- await ctx.message.remove_reaction('<a:loading:1114111677990981692>', bot.user)
266
- await thread.edit(archived=True)
267
-
268
-
269
- #----------------------------------------------------------------------------------------------------------------------------------------------
270
- # Spider-Verse βœ…
271
- @bot.command()
272
- async def spidey(ctx):
273
- try:
274
- if await safetychecks(ctx): #βœ…
275
- if ctx.channel.id == 1114218191594471514:
276
- await ctx.message.add_reaction('<a:loading:1114111677990981692>')
277
- thread = await ctx.message.create_thread(name=f'Spider-verse | {ctx.author}', auto_archive_duration=60)
278
- if ctx.message.attachments:
279
- await thread.send(f'{ctx.author.mention} Generating images in thread, can take ~1 minute...')
280
- attachment = ctx.message.attachments[0]
281
- style = 'Spider-Verse'
282
- im = await asyncio.get_running_loop().run_in_executor(None, jojogan.predict, attachment.url, style)
283
- await thread.send(f'{ctx.author.mention} Here is the {style} version of it', file=discord.File(im))
284
- await ctx.message.add_reaction('<:agree:1098629085955113011>') # img + face
285
- await ctx.message.remove_reaction('<a:loading:1114111677990981692>', bot.user)
286
- await thread.edit(archived=True)
287
- else: # no image
288
- await thread.send(f"{ctx.author.mention} No attachments to be found...Can't animify dat! Try sending me an image πŸ˜‰")
289
- await ctx.message.add_reaction('<:disagree:1098628957521313892>')
290
- await ctx.message.remove_reaction('<a:loading:1114111677990981692>', bot.user)
291
- await thread.edit(archived=True)
292
- except Exception as e: # no generation / img + no face
293
- await fullqueue(e, thread)
294
- print(f"Error: {e}")
295
- await thread.send(f"{ctx.author.mention} Error: {e}")
296
- await ctx.message.add_reaction('<:disagree:1098628957521313892>')
297
- await ctx.message.remove_reaction('<a:loading:1114111677990981692>', bot.user)
298
- await thread.edit(archived=True)
299
- #----------------------------------------------------------------------------------------------------------------------------------------------
300
- # sketch βœ…
301
- @bot.command()
302
- async def sketch(ctx):
303
- try:
304
- if await safetychecks(ctx): #βœ…
305
- if ctx.channel.id == 1114218145343877180:
306
- await ctx.message.add_reaction('<a:loading:1114111677990981692>')
307
- thread = await ctx.message.create_thread(name=f'Sketch | {ctx.author}', auto_archive_duration=60)
308
- if ctx.message.attachments:
309
- await thread.send(f'{ctx.author.mention} Generating images in thread, can take ~1 minute...')
310
- attachment = ctx.message.attachments[0]
311
- #style = 'sketch'
312
- im = await asyncio.get_running_loop().run_in_executor(None, jojogan.predict, attachment.url, 'sketch')
313
- await thread.send(f'{ctx.author.mention} Here is the sketch version of it', file=discord.File(im))
314
- await ctx.message.add_reaction('<:agree:1098629085955113011>') # img + face
315
- await ctx.message.remove_reaction('<a:loading:1114111677990981692>', bot.user)
316
- await thread.edit(archived=True)
317
- else: # no image
318
- await thread.send(f"{ctx.author.mention} No attachments to be found...Can't animify dat! Try sending me an image πŸ˜‰")
319
- await ctx.message.add_reaction('<:disagree:1098628957521313892>')
320
- await ctx.message.remove_reaction('<a:loading:1114111677990981692>', bot.user)
321
- await thread.edit(archived=True)
322
- except Exception as e: # no generation / img + no face
323
- await fullqueue(e, thread)
324
- print(f"Error: {e}")
325
- await thread.send(f"{ctx.author.mention} Error: {e}")
326
- await ctx.message.add_reaction('<:disagree:1098628957521313892>')
327
- await ctx.message.remove_reaction('<a:loading:1114111677990981692>', bot.user)
328
- await thread.edit(archived=True)
329
  #----------------------------------------------------------------------------------------------------------------------------------------------
330
- async def fullqueue(e, thread):
331
  error_message = str(e)
332
  if "Error: Expecting value: line 1 column 1 (char 0)" in error_message:
333
  await thread.send("Queue is full! Please try again.")
@@ -338,8 +132,6 @@ async def fullqueue(e, thread):
338
  await thread.send("Space is building! Please try again after a few minutes.")
339
 
340
  #----------------------------------------------------------------------------------------------------------------------------------------------
341
-
342
-
343
  # deepfloydif stage 1 generation βœ…
344
  def inference(prompt):
345
  negative_prompt = ''
@@ -379,7 +171,7 @@ async def deepfloydif(ctx, *, prompt: str):
379
  try:
380
  try:
381
  if await safetychecks(ctx): #βœ…
382
- if ctx.channel.id == 1113182673859518514:
383
  await ctx.message.add_reaction('<a:loading:1114111677990981692>')
384
  dfif_command_message_id = ctx.message.id # we will use this in some magic later on
385
  thread = await ctx.message.create_thread(name=f'DeepfloydIF | {prompt}', auto_archive_duration=60) # could also just use prompt, no deepfloydif
@@ -560,7 +352,7 @@ async def on_reaction_add(reaction, user): # ctx = await bot.get_context(reac
560
  if not user.bot:
561
  thread = reaction.message.channel
562
  threadparentid = thread.parent.id
563
- if threadparentid == 1113182673859518514: # testing-the-bot, should be whatever the deepfloydif channel is
564
  # 811235357663297546 = lunarflu
565
  if reaction.message.attachments:
566
  if user.id == reaction.message.mentions[0].id: # if user.id == reaction.message.mentions[0].id:
@@ -618,7 +410,7 @@ async def falcon(ctx, *, prompt: str):
618
  # dict[threadid, authorid]
619
 
620
  if not ctx.author.bot:
621
- if ctx.channel.id == 1116089829147557999: # initial thread creation inside #falcon
622
  #if ctx.author.id not in falcon_users: # deprecated
623
  if ctx.author.id not in falcon_userid_threadid_dictionary:
624
  await ctx.message.add_reaction('<a:loading:1114111677990981692>')
@@ -653,7 +445,7 @@ async def falcon(ctx, *, prompt: str):
653
  elif ctx.author.id in falcon_userid_threadid_dictionary:
654
  # get the threadid, grab the last message in that thread, link to that message
655
  thread_id = falcon_userid_threadid_dictionary[ctx.author.id]
656
- thread_link = f"https://discord.com/channels/879548962464493619/1116089829147557999/{thread_id}"
657
  await ctx.reply(f"{ctx.author.mention}, you already have an existing conversation here {thread_link}! Use !falconclear in the #falcon channel to start a new one.")
658
  #------------------------------------
659
  # post all other generations here
@@ -688,61 +480,12 @@ async def falcon(ctx, *, prompt: str):
688
  @bot.command()
689
  async def falconclear(ctx):
690
  if not ctx.author.bot:
691
- if ctx.channel.id == 1116089829147557999:
692
  if ctx.author.id in falcon_userid_threadid_dictionary:
693
  if ctx.author.id in falcon_dictionary:
694
  del falcon_userid_threadid_dictionary[ctx.author.id]
695
  del falcon_dictionary[ctx.author.id]
696
  await ctx.reply(f"{ctx.author.mention}'s conversation has been cleared. Feel free to start a new one!")
697
- #----------------------------------------------------------------------------------------------------------------------------
698
-
699
-
700
-
701
- '''
702
- @bot.event
703
- async def on_message(message):
704
- await asyncio.sleep(5)
705
- # message.author.roles
706
- # bot
707
- # channel?
708
- try:
709
- if await on_message_safetychecks(message):
710
- global falcon_userid_threadid_dictionary
711
- global falcon_dictionary
712
- # is this our unique channel (falcon thread?)
713
- if message.author.id in falcon_userid_threadid_dictionary:
714
- if message.channel.id == falcon_userid_threadid_dictionary[message.author.id]:
715
- await message.add_reaction('<a:loading:1114111677990981692>') # helps the bot appear responsive
716
- chathistory = falcon_dictionary[message.author.id]
717
- instructions = "The following is a conversation between a highly knowledgeable and intelligent AI assistant, " \
718
- "called Falcon, and a human user, called User. In the following interactions, " \
719
- "User and Falcon will converse in natural language, and Falcon will answer User's questions. " \
720
- "Falcon was built to be respectful, polite and inclusive. " \
721
- "Falcon was built by the Technology Innovation Institute in Abu Dhabi. " \
722
- "Falcon will never decline to answer a question, and always attempts to give an answer that " \
723
- "User would be satisfied with. It knows a lot, and always tells the truth. The conversation begins."
724
- # handles the blocking task in the background so the discord bot stays responsive
725
- # for added security, we could verify if message.content contains symbols used in commands; But those will fail anyways (see safetychecks)
726
- job = falconclient.submit(message.content, chathistory, instructions, 0.8, 0.9, fn_index=1) # job is similar to run_in_executor (but better)
727
- while job.done() == False:
728
- status = job.status() # this could be used for debugging etc
729
- #print(status)
730
- else:
731
- file_paths = job.outputs() # file_paths = ["tmp123.json", "tmp456.json," etc...]
732
- full_generation = file_paths[-1] # the last filepath contains the full generated text
733
- with open(full_generation, 'r') as file:
734
- data = json.load(file)
735
- output_text = data[-1][-1] # we only need the very last/latest string for the discord bot to output
736
- falcon_dictionary[message.author.id] = full_generation # update our unique conversation
737
- print(output_text)
738
- await message.reply(f"{output_text}") # reply to user's prompt (whatever they typed)
739
- await message.remove_reaction('<a:loading:1114111677990981692>', bot.user)
740
- except Exception as e:
741
- print(f"Error: {e}")
742
- if message.channel.id == 1116089829147557999:
743
- await message.reply(f"{e} cc <@811235357663297546> (falcon error)") # ping lunarflu if something breaks
744
- await asyncio.sleep(5)
745
- '''
746
  #----------------------------------------------------------------------------------------------------------------------------
747
  # hackerllama magic to run the bot in a Hugging Face Space
748
  def run_bot():
 
52
 
53
  bot = commands.Bot(command_prefix='!', intents=intents)
54
 
 
 
 
 
 
 
55
  #---------------------------------------------------------------------------------------------------------------------------------------------
56
  @bot.event
57
  async def on_ready():
58
  print('Logged on as', bot.user)
59
  bot.log_channel = bot.get_channel(1100458786826747945) # 1100458786826747945 = bot-test, 1107006391547342910 = lunarbot server
 
 
 
 
 
 
 
 
60
  #---------------------------------------------------------------------------------------------------------------------------------------------
61
  async def safetychecks(ctx):
62
  failure_emoji = '<:disagree:1098628957521313892>'
 
76
  await ctx.message.add_reaction(failure_emoji)
77
  return False
78
 
79
+ '''
80
  # review this, may be able to remove
81
  #βœ…βœ… check if the command is in the allowed channel(s)
82
  bot_test = 1100458786826747945
83
+ deepfloydif_channel = 1119313215675973714
84
+ falcon_channel = 1119313248056004729
 
 
 
85
 
86
  channel_ids = [bot_test, deepfloydif_channel, jojo_channel, spidey_channel, sketch_channel, falcon_channel]
87
  if ctx.channel.id not in channel_ids:
 
89
  thread = await ctx.message.create_thread(name=f'Channel Error')
90
  await thread.send(f"Error: {ctx.author.mention} commands are not permitted in {ctx.channel}")
91
  await ctx.message.add_reaction(failure_emoji)
92
+ return False
93
+ '''
94
 
95
  '''
96
  #βœ…βœ… check if the user has the required role(s)
 
120
  print(f"Error: safetychecks failed somewhere, command will not continue, {e}")
121
  await ctx.message.reply(f"❌ <@811235357663297546> SC failed somewhere ❌ {e}") # this will always ping, as long as the bot has access to the channel
122
  await ctx.message.add_reaction(failure_emoji)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
123
  #----------------------------------------------------------------------------------------------------------------------------------------------
124
+ async def fullqueue(e, thread): # can improve this using jobs from gradio
125
  error_message = str(e)
126
  if "Error: Expecting value: line 1 column 1 (char 0)" in error_message:
127
  await thread.send("Queue is full! Please try again.")
 
132
  await thread.send("Space is building! Please try again after a few minutes.")
133
 
134
  #----------------------------------------------------------------------------------------------------------------------------------------------
 
 
135
  # deepfloydif stage 1 generation βœ…
136
  def inference(prompt):
137
  negative_prompt = ''
 
171
  try:
172
  try:
173
  if await safetychecks(ctx): #βœ…
174
+ if ctx.channel.id == 1119313215675973714:
175
  await ctx.message.add_reaction('<a:loading:1114111677990981692>')
176
  dfif_command_message_id = ctx.message.id # we will use this in some magic later on
177
  thread = await ctx.message.create_thread(name=f'DeepfloydIF | {prompt}', auto_archive_duration=60) # could also just use prompt, no deepfloydif
 
352
  if not user.bot:
353
  thread = reaction.message.channel
354
  threadparentid = thread.parent.id
355
+ if threadparentid == 1119313215675973714: # testing-the-bot, should be whatever the deepfloydif channel is
356
  # 811235357663297546 = lunarflu
357
  if reaction.message.attachments:
358
  if user.id == reaction.message.mentions[0].id: # if user.id == reaction.message.mentions[0].id:
 
410
  # dict[threadid, authorid]
411
 
412
  if not ctx.author.bot:
413
+ if ctx.channel.id == 1119313248056004729: # initial thread creation inside #falcon
414
  #if ctx.author.id not in falcon_users: # deprecated
415
  if ctx.author.id not in falcon_userid_threadid_dictionary:
416
  await ctx.message.add_reaction('<a:loading:1114111677990981692>')
 
445
  elif ctx.author.id in falcon_userid_threadid_dictionary:
446
  # get the threadid, grab the last message in that thread, link to that message
447
  thread_id = falcon_userid_threadid_dictionary[ctx.author.id]
448
+ thread_link = f"https://discord.com/channels/879548962464493619/1119313248056004729/{thread_id}"
449
  await ctx.reply(f"{ctx.author.mention}, you already have an existing conversation here {thread_link}! Use !falconclear in the #falcon channel to start a new one.")
450
  #------------------------------------
451
  # post all other generations here
 
480
  @bot.command()
481
  async def falconclear(ctx):
482
  if not ctx.author.bot:
483
+ if ctx.channel.id == 1119313248056004729:
484
  if ctx.author.id in falcon_userid_threadid_dictionary:
485
  if ctx.author.id in falcon_dictionary:
486
  del falcon_userid_threadid_dictionary[ctx.author.id]
487
  del falcon_dictionary[ctx.author.id]
488
  await ctx.reply(f"{ctx.author.mention}'s conversation has been cleared. Feel free to start a new one!")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
489
  #----------------------------------------------------------------------------------------------------------------------------
490
  # hackerllama magic to run the bot in a Hugging Face Space
491
  def run_bot():